home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60src.lha / Vim / vim60 / src / digraph.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-08-27  |  52.7 KB  |  2,470 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  * See README.txt for an overview of the Vim source code.
  8.  */
  9.  
  10. /*
  11.  * digraph.c: code for digraphs
  12.  */
  13.  
  14. #include "vim.h"
  15.  
  16. #if defined(FEAT_DIGRAPHS) || defined(PROTO)
  17.  
  18. #ifdef FEAT_MBYTE
  19. typedef int result_T;
  20. #else
  21. typedef char_u result_T;
  22. #endif
  23.  
  24. typedef struct digraph
  25. {
  26.     char_u    char1;
  27.     char_u    char2;
  28.     result_T    result;
  29. } digr_T;
  30.  
  31. static int getexactdigraph __ARGS((int, int, int));
  32. static void printdigraph __ARGS((digr_T *));
  33.  
  34. /* digraphs added by the user */
  35. static garray_T    user_digraphs = {0, 0, sizeof(digr_T), 10, NULL};
  36.  
  37. /*
  38.  * Note: Characters marked with XX are not included literally, because some
  39.  * compilers cannot handle them (Amiga SAS/C is the most picky one).
  40.  */
  41. #if defined(MSDOS) || defined(OS2)
  42.     /*
  43.      * MSDOS digraphs.
  44.      */
  45. digr_T    digraphdefault[] =
  46.        {{'C', ',', 128},    /* ~@ XX */
  47.     {'u', '"', 129},    /*  */
  48.     {'e', '\'', 130},    /* ‚ */
  49.     {'a', '^', 131},    /* ƒ */
  50.     {'a', '"', 132},    /* „ */
  51.     {'a', '`', 133},    /* … */
  52.     {'a', '@', 134},    /* † */
  53.     {'c', ',', 135},    /* ~G XX */
  54.     {'e', '^', 136},    /* ~H XX */
  55.     {'e', '"', 137},    /* ‰ */
  56.     {'e', '`', 138},    /* Š */
  57.     {'i', '"', 139},    /* ‹ */
  58.     {'i', '^', 140},    /* Œ */
  59.     {'i', '`', 141},    /*  */
  60.     {'A', '"', 142},    /* ~N XX */
  61.     {'A', '@', 143},    /*  */
  62.     {'E', '\'', 144},    /*  */
  63.     {'a', 'e', 145},    /* ‘ */
  64.     {'A', 'E', 146},    /* ’ */
  65.     {'o', '^', 147},    /* “ */
  66.     {'o', '"', 148},    /* ” */
  67.     {'o', '`', 149},    /* • */
  68.     {'u', '^', 150},    /* – */
  69.     {'u', '`', 151},    /* — */
  70.     {'y', '"', 152},    /* ˜ */
  71.     {'O', '"', 153},    /* ™ */
  72.     {'U', '"', 154},    /* š */
  73.     {'c', '|', 155},    /* › */
  74.     {'$', '$', 156},    /* œ */
  75.     {'Y', '-', 157},    /* ~] XX */
  76.     {'P', 't', 158},    /* ž */
  77.     {'f', 'f', 159},    /* Ÿ */
  78.     {'a', '\'', 160},    /*   */
  79.     {'i', '\'', 161},    /* ¡ */
  80.     {'o', '\'', 162},    /* ¢ */
  81.     {'u', '\'', 163},    /* x XX */
  82.     {'n', '~', 164},    /* ¤ */
  83.     {'N', '~', 165},    /* ¥ */
  84.     {'a', 'a', 166},    /* ¦ */
  85.     {'o', 'o', 167},    /* § */
  86.     {'~', '?', 168},    /* ¨ */
  87.     {'-', 'a', 169},    /* © */
  88.     {'a', '-', 170},    /* ª */
  89.     {'1', '2', 171},    /* « */
  90.     {'1', '4', 172},    /* ¬ */
  91.     {'~', '!', 173},    /* ­ */
  92.     {'<', '<', 174},    /* ® */
  93.     {'>', '>', 175},    /* ¯ */
  94.  
  95.     {'s', 's', 225},    /* á */
  96.     {'j', 'u', 230},    /* æ */
  97.     {'o', '/', 237},    /* í */
  98.     {'+', '-', 241},    /* ñ */
  99.     {'>', '=', 242},    /* ò */
  100.     {'<', '=', 243},    /* ó */
  101.     {':', '-', 246},    /* ö */
  102.     {'~', '~', 247},    /* ÷ */
  103.     {'~', 'o', 248},    /* ø */
  104.     {'2', '2', 253},    /* ý */
  105.     {NUL, NUL, NUL}
  106.     };
  107.  
  108. #else    /* !MSDOS && !OS2 */
  109. # ifdef __MINT__
  110.  
  111.     /*
  112.      * ATARI digraphs
  113.      */
  114. digr_T    digraphdefault[] =
  115.        {{'C', ',', 128},    /* ~@ XX */
  116.     {'u', '"', 129},    /*  */
  117.     {'e', '\'', 130},    /* ‚ */
  118.     {'a', '^', 131},    /* ƒ */
  119.     {'a', '"', 132},    /* „ */
  120.     {'a', '`', 133},    /* … */
  121.     {'a', '@', 134},    /* † */
  122.     {'c', ',', 135},    /* ~G XX */
  123.     {'e', '^', 136},    /* ~H XX */
  124.     {'e', '"', 137},    /* ‰ */
  125.     {'e', '`', 138},    /* Š */
  126.     {'i', '"', 139},    /* ‹ */
  127.     {'i', '^', 140},    /* Œ */
  128.     {'i', '`', 141},    /*  */
  129.     {'A', '"', 142},    /* Ž */
  130.     {'A', '@', 143},    /*  */
  131.     {'E', '\'', 144},    /*  */
  132.     {'a', 'e', 145},    /* ‘ */
  133.     {'A', 'E', 146},    /* ’ */
  134.     {'o', '^', 147},    /* “ */
  135.     {'o', '"', 148},    /* ” */
  136.     {'o', '`', 149},    /* • */
  137.     {'u', '^', 150},    /* – */
  138.     {'u', '`', 151},    /* — */
  139.     {'y', '"', 152},    /* ˜ */
  140.     {'O', '"', 153},    /* ™ */
  141.     {'U', '"', 154},    /* š */
  142.     {'c', '|', 155},    /* › */
  143.     {'$', '$', 156},    /* œ */
  144.     {'Y', '-', 157},    /* ~] XX */
  145.     {'s', 's', 158},    /* ž */
  146.     {'f', 'f', 159},    /* Ÿ */
  147.     {'a', '\'', 160},    /*   */
  148.     {'i', '\'', 161},    /* ¡ */
  149.     {'o', '\'', 162},    /* ¢ */
  150.     {'u', '\'', 163},    /* £ */
  151.     {'n', '~', 164},    /* ¤ */
  152.     {'N', '~', 165},    /* ¥ */
  153.     {'a', 'a', 166},    /* ¦ */
  154.     {'o', 'o', 167},    /* § */
  155.     {'~', '?', 168},    /* ¨ */
  156.     {'-', 'a', 169},    /* © */
  157.     {'a', '-', 170},    /* ª */
  158.     {'1', '2', 171},    /* « */
  159.     {'1', '4', 172},    /* ¬ */
  160.     {'~', '!', 173},    /* ­ */
  161.     {'<', '<', 174},    /* ® */
  162.     {'>', '>', 175},    /* ¯ */
  163.     {'j', 'u', 230},    /* æ */
  164.     {'o', '/', 237},    /* í */
  165.     {'+', '-', 241},    /* ñ */
  166.     {'>', '=', 242},    /* ò */
  167.     {'<', '=', 243},    /* ó */
  168.     {':', '-', 246},    /* ö */
  169.     {'~', '~', 247},    /* ÷ */
  170.     {'~', 'o', 248},    /* ø */
  171.     {'2', '2', 253},    /* ý */
  172.     {NUL, NUL, NUL}
  173.     };
  174.  
  175. # else    /* !__MINT__ */
  176. #  ifdef HPUX_DIGRAPHS
  177.  
  178.     /*
  179.      * different HPUX digraphs
  180.      */
  181. digr_T    digraphdefault[] =
  182.        {{'A', '`', 161},    /* ¡ */
  183.     {'A', '^', 162},    /* ¢ */
  184.     {'E', '`', 163},    /* £ */
  185.     {'E', '^', 164},    /* ¤ */
  186.     {'E', '"', 165},    /* ¥ */
  187.     {'I', '^', 166},    /* ¦ */
  188.     {'I', '"', 167},    /* § */
  189.     {'\'', '\'', 168},    /* ¨ */
  190.     {'`', '`', 169},    /* © */
  191.     {'^', '^', 170},    /* ª */
  192.     {'"', '"', 171},    /* « */
  193.     {'~', '~', 172},    /* ¬ */
  194.     {'U', '`', 173},    /* ­ */
  195.     {'U', '^', 174},    /* ® */
  196.     {'L', '=', 175},    /* ¯ */
  197.     {'~', '_', 176},    /* ° */
  198.     {'Y', '\'', 177},    /* ± */
  199.     {'y', '\'', 178},    /* ² */
  200.     {'~', 'o', 179},    /* ³ */
  201.     {'C', ',', 180},    /* ´ */
  202.     {'c', ',', 181},    /* µ */
  203.     {'N', '~', 182},    /* ¶ */
  204.     {'n', '~', 183},    /* · */
  205.     {'~', '!', 184},    /* ¸ */
  206.     {'~', '?', 185},    /* ¹ */
  207.     {'o', 'x', 186},    /* º */
  208.     {'L', '-', 187},    /* » */
  209.     {'Y', '=', 188},    /* ¼ */
  210.     {'p', 'p', 189},    /* ½ */
  211.     {'f', 'l', 190},    /* ¾ */
  212.     {'c', '|', 191},    /* ¿ */
  213.     {'a', '^', 192},    /* À */
  214.     {'e', '^', 193},    /* Á */
  215.     {'o', '^', 194},    /* Â */
  216.     {'u', '^', 195},    /* Ã */
  217.     {'a', '\'', 196},    /* Ä */
  218.     {'e', '\'', 197},    /* Å */
  219.     {'o', '\'', 198},    /* Æ */
  220.     {'u', '\'', 199},    /* Ç */
  221.     {'a', '`', 200},    /* È */
  222.     {'e', '`', 201},    /* É */
  223.     {'o', '`', 202},    /* Ê */
  224.     {'u', '`', 203},    /* Ë */
  225.     {'a', '"', 204},    /* Ì */
  226.     {'e', '"', 205},    /* Í */
  227.     {'o', '"', 206},    /* Î */
  228.     {'u', '"', 207},    /* Ï */
  229.     {'A', 'o', 208},    /* Ð */
  230.     {'i', '^', 209},    /* Ñ */
  231.     {'O', '/', 210},    /* Ò */
  232.     {'A', 'E', 211},    /* Ó */
  233.     {'a', 'o', 212},    /* Ô */
  234.     {'i', '\'', 213},    /* Õ */
  235.     {'o', '/', 214},    /* Ö */
  236.     {'a', 'e', 215},    /* × */
  237.     {'A', '"', 216},    /* Ø */
  238.     {'i', '`', 217},    /* Ù */
  239.     {'O', '"', 218},    /* Ú */
  240.     {'U', '"', 219},    /* Û */
  241.     {'E', '\'', 220},    /* Ü */
  242.     {'i', '"', 221},    /* Ý */
  243.     {'s', 's', 222},    /* Þ */
  244.     {'O', '^', 223},    /* ß */
  245.     {'A', '\'', 224},    /* à */
  246.     {'A', '~', 225},    /* á */
  247.     {'a', '~', 226},    /* â */
  248.     {'D', '-', 227},    /* ã */
  249.     {'d', '-', 228},    /* ä */
  250.     {'I', '\'', 229},    /* å */
  251.     {'I', '`', 230},    /* æ */
  252.     {'O', '\'', 231},    /* ç */
  253.     {'O', '`', 232},    /* è */
  254.     {'O', '~', 233},    /* é */
  255.     {'o', '~', 234},    /* ê */
  256.     {'S', '~', 235},    /* ë */
  257.     {'s', '~', 236},    /* ì */
  258.     {'U', '\'', 237},    /* í */
  259.     {'Y', '"', 238},    /* î */
  260.     {'y', '"', 239},    /* ï */
  261.     {'p', '-', 240},    /* ð */
  262.     {'p', '~', 241},    /* ñ */
  263.     {'~', '.', 242},    /* ò */
  264.     {'j', 'u', 243},    /* ó */
  265.     {'P', 'p', 244},    /* ô */
  266.     {'3', '4', 245},    /* õ */
  267.     {'-', '-', 246},    /* ö */
  268.     {'1', '4', 247},    /* ÷ */
  269.     {'1', '2', 248},    /* ø */
  270.     {'a', '_', 249},    /* ù */
  271.     {'o', '_', 250},    /* ú */
  272.     {'<', '<', 251},    /* û */
  273.     {'x', 'x', 252},    /* ü */
  274.     {'>', '>', 253},    /* ý */
  275.     {'+', '-', 254},    /* þ */
  276.     {'n', 'u', 255},    /* x XX */
  277.     {NUL, NUL, NUL}
  278.     };
  279.  
  280. #  else    /* !HPUX_DIGRAPHS */
  281.  
  282. #   ifdef EBCDIC
  283.  
  284.     /*
  285.      * EBCDIC - ISO digraphs
  286.      * TODO: EBCDIC Table is Code-Page 1047
  287.      */
  288. digr_T    digraphdefault[] =
  289.        {{'a', '^',    66},    /* â */
  290.     {'a', '"',    67},    /* ä */
  291.     {'a', '`',    68},    /* à */
  292.     {'a', '\'',   69},    /* á */
  293.     {'a', '~',    70},    /* ã */
  294.     {'a', '@',    71},    /* å */
  295.     {'a', 'a',    71},    /* å */
  296.     {'c', ',',    72},    /* ç */
  297.     {'n', '~',    73},    /* ñ */
  298.     {'c', '|',    74},    /* ¢ */
  299.     {'e', '\'',   81},    /* é */
  300.     {'e', '^',    82},    /* ê */
  301.     {'e', '"',    83},    /* ë */
  302.     {'e', '`',    84},    /* è */
  303.     {'i', '\'',   85},    /* í */
  304.     {'i', '^',    86},    /* î */
  305.     {'i', '"',    87},    /* ï */
  306.     {'i', '`',    88},    /* ì */
  307.     {'s', 's',    89},    /* ß */
  308.     {'A', '^',    98},    /* Â */
  309.     {'A', '"',    99},    /* Ä */
  310.     {'A', '`',   100},    /* À */
  311.     {'A', '\'',  101},    /* Á */
  312.     {'A', '~',   102},    /* Ã */
  313.     {'A', '@',   103},    /* Å */
  314.     {'A', 'A',   103},    /* Å */
  315.     {'C', ',',   104},    /* Ç */
  316.     {'N', '~',   105},    /* Ñ */
  317.     {'|', '|',   106},    /* ¦ */
  318.     {'o', '/',   112},    /* ø */
  319.     {'E', '\'',  113},    /* É */
  320.     {'E', '^',   114},    /* Ê */
  321.     {'E', '"',   115},    /* Ë */
  322.     {'E', '`',   116},    /* È */
  323.     {'I', '\'',  117},    /* Í */
  324.     {'I', '^',   118},    /* Î */
  325.     {'I', '"',   119},    /* Ï */
  326.     {'I', '`',   120},    /* Ì */
  327.     {'O', '/',   128},    /* 0/ XX */
  328.     {'<', '<',   138},    /* « */
  329.     {'>', '>',   139},    /* » */
  330.     {'d', '-',   140},    /* ð */
  331.     {'y', '\'',  141},    /* ý */
  332.     {'i', 'p',   142},    /* þ */
  333.     {'+', '-',   143},    /* ± */
  334.     {'~', 'o',   144},    /* ° */
  335.     {'a', '-',   154},    /* ª */
  336.     {'o', '-',   155},    /* º */
  337.     {'a', 'e',   156},    /* æ */
  338.     {',', ',',   157},    /* , XX */
  339.     {'A', 'E',   158},    /* Æ */
  340.     {'o', 'x',   159},    /* ¤ - currency symbol in ISO 8859-1 */
  341.     {'e', '=',   159},    /* ¤ - euro symbol in ISO 8859-15 */
  342.     {'j', 'u',   160},    /* µ */
  343.     {'y', '"',   167},    /* x XX */
  344.     {'~', '!',   170},    /* ¡ */
  345.     {'~', '?',   171},    /* ¿ */
  346.     {'D', '-',   172},    /* Ð */
  347.     {'I', 'p',   174},    /* Þ */
  348.     {'r', 'O',   175},    /* ® */
  349.     {'-', ',',   176},    /* ¬ */
  350.     {'$', '$',   177},    /* £ */
  351.     {'Y', '-',   178},    /* ¥ */
  352.     {'~', '.',   179},    /* · */
  353.     {'c', 'O',   180},    /* © */
  354.     {'p', 'a',   181},    /* § */
  355.     {'p', 'p',   182},    /* ¶ */
  356.     {'1', '4',   183},    /* ¼ */
  357.     {'1', '2',   184},    /* ½ */
  358.     {'3', '4',   185},    /* ¾ */
  359.     {'Y', '\'',  186},    /* Ý */
  360.     {'"', '"',   187},    /* ¨ */
  361.     {'-', '=',   188},    /* ¯ */
  362.     {'\'', '\'', 190},    /* ´ */
  363.     {'O', 'E',   191},    /* × - OE in ISO 8859-15 */
  364.     {'/', '\\',  191},    /* × - multiplication symbol in ISO 8859-1 */
  365.     {'-', '-',   202},    /* ­ */
  366.     {'o', '^',   203},    /* ô */
  367.     {'o', '"',   204},    /* ö */
  368.     {'o', '`',   205},    /* ò */
  369.     {'o', '\'',  206},    /* ó */
  370.     {'o', '~',   207},    /* õ */
  371.     {'1', '1',   218},    /* ¹ */
  372.     {'u', '^',   219},    /* û */
  373.     {'u', '"',   220},    /* ü */
  374.     {'u', '`',   221},    /* ù */
  375.     {'u', '\'',  222},    /* ú */
  376.     {':', '-',   225},    /* ÷ - division symbol in ISO 8859-1 */
  377.     {'o', 'e',   225},    /* ÷ - oe in ISO 8859-15 */
  378.     {'2', '2',   234},    /* ² */
  379.     {'O', '^',   235},    /* Ô */
  380.     {'O', '"',   236},    /* Ö */
  381.     {'O', '`',   237},    /* Ò */
  382.     {'O', '\'',  238},    /* Ó */
  383.     {'O', '~',   239},    /* Õ */
  384.     {'3', '3',   250},    /* ³ */
  385.     {'U', '^',   251},    /* Û */
  386.     {'U', '"',   252},    /* Ü */
  387.     {'U', '`',   253},    /* Ù */
  388.     {'U', '\'',  254},    /* Ú */
  389.     {NUL, NUL, NUL}
  390.     };
  391.  
  392. #   else
  393. #    ifdef MACOS
  394.  
  395.     /*
  396.      * Macintosh digraphs
  397.      */
  398. digr_T    digraphdefault[] =
  399.        {{'a', 't', 64},        /* @ */
  400.     {'A', '"', 128},    /* ~@ XX */
  401.     {'A', 'o', 129},    /* Å */
  402.     {'C', ',', 130},    /* Ç */
  403.     {'E', '\'', 131},    /* É */
  404.     {'N', '~', 132},    /* Ñ */
  405.     {'O', '"', 133},    /* Ö */
  406.     {'U', '"', 134},    /* Ü */
  407.     {'a', '\'', 135},    /* ~G XX */
  408.     {'a', '`', 136},    /* ~H XX */
  409.     {'a', '^', 137},    /* â */
  410.     {'a', '"', 138},    /* ä */
  411.     {'a', '~', 139},    /* ã */
  412.     {'a', 'o', 140},    /* å */
  413.     {'c', ',', 141},    /* ç */
  414.     {'e', '\'', 142},    /* é */
  415.     {'e', '`', 143},    /* è */
  416.     {'e', '^', 144},    /* ê */
  417.     {'e', '"', 145},    /* ë */
  418.     {'i', '\'', 146},    /* í */
  419.     {'i', '`', 147},    /* ì */
  420.     {'i', '^', 148},    /* î */
  421.     {'i', '"', 149},    /* ï */
  422.     {'n', '~', 150},    /* ñ */
  423.     {'o', '\'', 151},    /* ó */
  424.     {'o', '`', 152},    /* ò */
  425.     {'o', '^', 153},    /* ô */
  426.     {'o', '"', 154},    /* ö */
  427.     {'o', '~', 155},    /* o */
  428.     {'u', '\'', 156},    /* ú */
  429.     {'u', '`', 157},    /* ~] XX */
  430.     {'u', '^', 158},    /* û */
  431.     {'u', '"', 159},    /* ü */
  432.     {'+', '_', 160},    /* Ý */
  433.     {'~', 'o', 161},    /* ° */
  434.     {'c', '|', 162},    /* ¢ */
  435.     {'$', '$', 163},    /* £ */
  436.     {'p', 'a', 164},    /* § */
  437.     {'.', '.', 165},    /* * */
  438.     {'P', 'P', 166},    /* ¶ */
  439.     {'s', 's', 167},    /* ß */
  440.     {'r', 'O', 168},    /* ® */
  441.     {'c', 'O', 169},    /* © */
  442.     {'T', 'M', 170},    /*  */
  443.     {'=', '/', 173},    /* ‚ */
  444.     {'A', 'E', 174},    /* Æ */
  445.     {'O', '/', 175},    /* Ø */
  446.     {'0', '0', 176},    /* ƒ */
  447.     {'+', '-', 177},    /* ± */
  448.     {'<', '=', 178},    /* ¾ */
  449.     {'>', '=', 179},    /* „ */
  450.     {'Y', '-', 180},    /* ¥ */
  451.     {'j', 'u', 181},    /* µ */
  452.     {'m', 'u', 181},    /* µ */
  453.     {'d', 'd', 182},    /*  */
  454.     {'S', 'S', 183},    /* … */
  455.     {'S', 'I', 183},    /* … */
  456.     {'P', 'I', 184},    /* ½ */
  457.     {'p', 'i', 185},    /* ¼ */
  458.     {'I', 'I', 186},    /* † */
  459.     {'a', '-', 187},    /* » */
  460.     {'o', '-', 188},    /* º */
  461.     {'O', 'M', 189},    /* ½ */
  462.     {'a', 'e', 190},    /* æ */
  463.     {'o', '/', 191},    /* ø */
  464.     {'~', '?', 192},    /* ¿ */
  465.     {'~', '!', 193},    /* ¡ */
  466.     {'-', ',', 194},    /* ¬ */
  467.     {'v', '-', 195},    /* ~H XX */
  468.     {'f', '-', 196},    /* Ÿ */
  469.     {'~', '~', 197},    /* ‰ */
  470.     {'D', 'E', 198},    /*  */
  471.     {'<', '<', 199},    /* « */
  472.     {'>', '>', 200},    /* » */
  473.     {'.', ':', 201},    /* Š */
  474.     {'A', '`', 203},    /* À */
  475.     {'A', '~', 204},    /* Ã */
  476.     {'O', '~', 205},    /* Õ */
  477.     {'O', 'E', 206},    /* ‘ */
  478.     {'o', 'e', 207},    /* ¦ */
  479.     {'-', '.', 208},    /* - */
  480.     {'-', '-', 209},    /* - */
  481.     {'`', '`', 210},    /* " */
  482.     {'\'', '\'', 211},    /* " */
  483.     {'`', ' ', 212},    /* ' */
  484.     {'\'', ' ', 213},    /* ' */
  485.     {'-', ':', 214},    /* ÷ */
  486.     {'D', 'I', 215},    /* × */
  487.     {'y', ':', 216},    /* ÿ */
  488.     {'Y', ':', 217},    /*  */
  489.     {'/', '/', 218},    /* Ž */
  490.     {'E', '=', 219},    /* ¤ Euro System >=8.5 */
  491.     {'o', 'x', 219},    /* ¤ Currency System <=8.1*/
  492.     {'<', ' ', 220},    /* Ð */
  493.     {'>', ' ', 221},    /* ð */
  494.     {'f', 'i', 222},    /* Þ */
  495.     {'f', 'l', 223},    /* þ */
  496.     {'+', '+', 224},    /* ý */
  497.     {'~', '.', 225},    /* · */
  498.     {',', ' ', 226},    /* ’ */
  499.     {',', ',', 227},    /* “ */
  500.     {'%', '.', 228},    /* ” */
  501.     {'%', '0', 228},    /* ” */
  502.     {'A', '^', 229},    /* Â */
  503.     {'E', '^', 230},    /* Ê */
  504.     {'A', '\'', 231},    /* Á */
  505.     {'E', '"', 232},    /* Ë */
  506.     {'E', '`', 233},    /* È */
  507.     {'I', '\'', 234},    /* Í */
  508.     {'I', '^', 235},    /* Î */
  509.     {'I', '"', 236},    /* Ï */
  510.     {'I', '`', 237},    /* Ì */
  511.     {'O', '\'', 238},    /* Ó */
  512.     {'O', '^', 239},    /* Ô */
  513.     {'A', 'P', 240},    /* • */
  514.     {'O', '`', 241},    /* Ò */
  515.     {'U', '\'', 242},    /* Ú */
  516.     {'U', '^', 243},    /* Û */
  517.     {'U', '`', 244},    /* Ù */
  518.     {'i', '.', 245},    /* ž */
  519.     {NUL, NUL, NUL}
  520.     };
  521.  
  522. #    else    /* !MACOS */
  523.  
  524. #     ifdef OLD_DIGRAPHS
  525.  
  526.     /*
  527.      * digraphs compatible with Vim 5.x
  528.      */
  529. digr_T    digraphdefault[] =
  530.        {{'~', '!', 161},    /* ¡ */
  531.     {'c', '|', 162},    /* ¢ */
  532.     {'$', '$', 163},    /* £ */
  533.     {'o', 'x', 164},    /* ¤ - currency symbol in ISO 8859-1 */
  534.     {'e', '=', 164},    /* ¤ - euro symbol in ISO 8859-15 */
  535.     {'Y', '-', 165},    /* ¥ */
  536.     {'|', '|', 166},    /* ¦ */
  537.     {'p', 'a', 167},    /* § */
  538.     {'"', '"', 168},    /* ¨ */
  539.     {'c', 'O', 169},    /* © */
  540.     {'a', '-', 170},    /* ª */
  541.     {'<', '<', 171},    /* « */
  542.     {'-', ',', 172},    /* ¬ */
  543.     {'-', '-', 173},    /* ­ */
  544.     {'r', 'O', 174},    /* ® */
  545.     {'-', '=', 175},    /* ¯ */
  546.     {'~', 'o', 176},    /* ° */
  547.     {'+', '-', 177},    /* ± */
  548.     {'2', '2', 178},    /* ² */
  549.     {'3', '3', 179},    /* ³ */
  550.     {'\'', '\'', 180},    /* ´ */
  551.     {'j', 'u', 181},    /* µ */
  552.     {'p', 'p', 182},    /* ¶ */
  553.     {'~', '.', 183},    /* · */
  554.     {',', ',', 184},    /* ¸ */
  555.     {'1', '1', 185},    /* ¹ */
  556.     {'o', '-', 186},    /* º */
  557.     {'>', '>', 187},    /* » */
  558.     {'1', '4', 188},    /* ¼ */
  559.     {'1', '2', 189},    /* ½ */
  560.     {'3', '4', 190},    /* ¾ */
  561.     {'~', '?', 191},    /* ¿ */
  562.     {'A', '`', 192},    /* À */
  563.     {'A', '\'', 193},    /* Á */
  564.     {'A', '^', 194},    /* Â */
  565.     {'A', '~', 195},    /* Ã */
  566.     {'A', '"', 196},    /* Ä */
  567.     {'A', '@', 197},    /* Å */
  568.     {'A', 'A', 197},    /* Å */
  569.     {'A', 'E', 198},    /* Æ */
  570.     {'C', ',', 199},    /* Ç */
  571.     {'E', '`', 200},    /* È */
  572.     {'E', '\'', 201},    /* É */
  573.     {'E', '^', 202},    /* Ê */
  574.     {'E', '"', 203},    /* Ë */
  575.     {'I', '`', 204},    /* Ì */
  576.     {'I', '\'', 205},    /* Í */
  577.     {'I', '^', 206},    /* Î */
  578.     {'I', '"', 207},    /* Ï */
  579.     {'D', '-', 208},    /* Ð */
  580.     {'N', '~', 209},    /* Ñ */
  581.     {'O', '`', 210},    /* Ò */
  582.     {'O', '\'', 211},    /* Ó */
  583.     {'O', '^', 212},    /* Ô */
  584.     {'O', '~', 213},    /* Õ */
  585.     {'O', '"', 214},    /* Ö */
  586.     {'/', '\\', 215},    /* × - multiplication symbol in ISO 8859-1 */
  587.     {'O', 'E', 215},    /* × - OE in ISO 8859-15 */
  588.     {'O', '/', 216},    /* Ø */
  589.     {'U', '`', 217},    /* Ù */
  590.     {'U', '\'', 218},    /* Ú */
  591.     {'U', '^', 219},    /* Û */
  592.     {'U', '"', 220},    /* Ü */
  593.     {'Y', '\'', 221},    /* Ý */
  594.     {'I', 'p', 222},    /* Þ */
  595.     {'s', 's', 223},    /* ß */
  596.     {'a', '`', 224},    /* à */
  597.     {'a', '\'', 225},    /* á */
  598.     {'a', '^', 226},    /* â */
  599.     {'a', '~', 227},    /* ã */
  600.     {'a', '"', 228},    /* ä */
  601.     {'a', '@', 229},    /* å */
  602.     {'a', 'a', 229},    /* å */
  603.     {'a', 'e', 230},    /* æ */
  604.     {'c', ',', 231},    /* ç */
  605.     {'e', '`', 232},    /* è */
  606.     {'e', '\'', 233},    /* é */
  607.     {'e', '^', 234},    /* ê */
  608.     {'e', '"', 235},    /* ë */
  609.     {'i', '`', 236},    /* ì */
  610.     {'i', '\'', 237},    /* í */
  611.     {'i', '^', 238},    /* î */
  612.     {'i', '"', 239},    /* ï */
  613.     {'d', '-', 240},    /* ð */
  614.     {'n', '~', 241},    /* ñ */
  615.     {'o', '`', 242},    /* ò */
  616.     {'o', '\'', 243},    /* ó */
  617.     {'o', '^', 244},    /* ô */
  618.     {'o', '~', 245},    /* õ */
  619.     {'o', '"', 246},    /* ö */
  620.     {':', '-', 247},    /* ÷ - division symbol in ISO 8859-1 */
  621.     {'o', 'e', 247},    /* ÷ - oe in ISO 8859-15 */
  622.     {'o', '/', 248},    /* ø */
  623.     {'u', '`', 249},    /* ù */
  624.     {'u', '\'', 250},    /* ú */
  625.     {'u', '^', 251},    /* û */
  626.     {'u', '"', 252},    /* ü */
  627.     {'y', '\'', 253},    /* ý */
  628.     {'i', 'p', 254},    /* þ */
  629.     {'y', '"', 255},    /* x XX */
  630.     {NUL, NUL, NUL}
  631.     };
  632. #     else /* OLD_DIGRAPHS */
  633.  
  634.     /*
  635.      * digraphs for Unicode from RFC1345
  636.      * (also work for ISO-8859-1 aka latin1)
  637.      */
  638. digr_T    digraphdefault[] =
  639.        {
  640.     {'N', 'U', 0x0a},    /* LF for NUL */
  641.     {'S', 'H', 0x01},
  642.     {'S', 'X', 0x02},
  643.     {'E', 'X', 0x03},
  644.     {'E', 'T', 0x04},
  645.     {'E', 'Q', 0x05},
  646.     {'A', 'K', 0x06},
  647.     {'B', 'L', 0x07},
  648.     {'B', 'S', 0x08},
  649.     {'H', 'T', 0x09},
  650.     {'L', 'F', 0x0a},
  651.     {'V', 'T', 0x0b},
  652.     {'F', 'F', 0x0c},
  653.     {'C', 'R', 0x0d},
  654.     {'S', 'O', 0x0e},
  655.     {'S', 'I', 0x0f},
  656.     {'D', 'L', 0x10},
  657.     {'D', '1', 0x11},
  658.     {'D', '2', 0x12},
  659.     {'D', '3', 0x13},
  660.     {'D', '4', 0x14},
  661.     {'N', 'K', 0x15},
  662.     {'S', 'Y', 0x16},
  663.     {'E', 'B', 0x17},
  664.     {'C', 'N', 0x18},
  665.     {'E', 'M', 0x19},
  666.     {'S', 'B', 0x1a},
  667.     {'E', 'C', 0x1b},
  668.     {'F', 'S', 0x1c},
  669.     {'G', 'S', 0x1d},
  670.     {'R', 'S', 0x1e},
  671.     {'U', 'S', 0x1f},
  672.     {'S', 'P', 0x20},
  673.     {'N', 'b', 0x23},
  674.     {'D', 'O', 0x24},
  675.     {'A', 't', 0x40},
  676.     {'<', '(', 0x5b},
  677.     {'/', '/', 0x5c},
  678.     {')', '>', 0x5d},
  679.     {'\'', '>', 0x5e},
  680.     {'\'', '!', 0x60},
  681.     {'(', '!', 0x7b},
  682.     {'!', '!', 0x7c},
  683.     {'!', ')', 0x7d},
  684.     {'\'', '?', 0x7e},
  685.     {'D', 'T', 0x7f},
  686.     {'P', 'A', 0x80},
  687.     {'H', 'O', 0x81},
  688.     {'B', 'H', 0x82},
  689.     {'N', 'H', 0x83},
  690.     {'I', 'N', 0x84},
  691.     {'N', 'L', 0x85},
  692.     {'S', 'A', 0x86},
  693.     {'E', 'S', 0x87},
  694.     {'H', 'S', 0x88},
  695.     {'H', 'J', 0x89},
  696.     {'V', 'S', 0x8a},
  697.     {'P', 'D', 0x8b},
  698.     {'P', 'U', 0x8c},
  699.     {'R', 'I', 0x8d},
  700.     {'S', '2', 0x8e},
  701.     {'S', '3', 0x8f},
  702.     {'D', 'C', 0x90},
  703.     {'P', '1', 0x91},
  704.     {'P', '2', 0x92},
  705.     {'T', 'S', 0x93},
  706.     {'C', 'C', 0x94},
  707.     {'M', 'W', 0x95},
  708.     {'S', 'G', 0x96},
  709.     {'E', 'G', 0x97},
  710.     {'S', 'S', 0x98},
  711.     {'G', 'C', 0x99},
  712.     {'S', 'C', 0x9a},
  713.     {'C', 'I', 0x9b},
  714.     {'S', 'T', 0x9c},
  715.     {'O', 'C', 0x9d},
  716.     {'P', 'M', 0x9e},
  717.     {'A', 'C', 0x9f},
  718.     {'N', 'S', 0xa0},
  719.     {'!', 'I', 0xa1},
  720.     {'C', 't', 0xa2},
  721.     {'P', 'd', 0xa3},
  722.     {'C', 'u', 0xa4},
  723.     {'Y', 'e', 0xa5},
  724.     {'B', 'B', 0xa6},
  725.     {'S', 'E', 0xa7},
  726.     {'\'', ':', 0xa8},
  727.     {'C', 'o', 0xa9},
  728.     {'-', 'a', 0xaa},
  729.     {'<', '<', 0xab},
  730.     {'N', 'O', 0xac},
  731.     {'-', '-', 0xad},
  732.     {'R', 'g', 0xae},
  733.     {'\'', 'm', 0xaf},
  734.     {'D', 'G', 0xb0},
  735.     {'+', '-', 0xb1},
  736.     {'2', 'S', 0xb2},
  737.     {'3', 'S', 0xb3},
  738.     {'\'', '\'', 0xb4},
  739.     {'M', 'y', 0xb5},
  740.     {'P', 'I', 0xb6},
  741.     {'.', 'M', 0xb7},
  742.     {'\'', ',', 0xb8},
  743.     {'1', 'S', 0xb9},
  744.     {'-', 'o', 0xba},
  745.     {'>', '>', 0xbb},
  746.     {'1', '4', 0xbc},
  747.     {'1', '2', 0xbd},
  748.     {'3', '4', 0xbe},
  749.     {'?', 'I', 0xbf},
  750.     {'A', '!', 0xc0},
  751.     {'A', '\'', 0xc1},
  752.     {'A', '>', 0xc2},
  753.     {'A', '?', 0xc3},
  754.     {'A', ':', 0xc4},
  755.     {'A', 'A', 0xc5},
  756.     {'A', 'E', 0xc6},
  757.     {'C', ',', 0xc7},
  758.     {'E', '!', 0xc8},
  759.     {'E', '\'', 0xc9},
  760.     {'E', '>', 0xca},
  761.     {'E', ':', 0xcb},
  762.     {'I', '!', 0xcc},
  763.     {'I', '\'', 0xcd},
  764.     {'I', '>', 0xce},
  765.     {'I', ':', 0xcf},
  766.     {'D', '-', 0xd0},
  767.     {'N', '?', 0xd1},
  768.     {'O', '!', 0xd2},
  769.     {'O', '\'', 0xd3},
  770.     {'O', '>', 0xd4},
  771.     {'O', '?', 0xd5},
  772.     {'O', ':', 0xd6},
  773.     {'*', 'X', 0xd7},
  774.     {'O', '/', 0xd8},
  775.     {'U', '!', 0xd9},
  776.     {'U', '\'', 0xda},
  777.     {'U', '>', 0xdb},
  778.     {'U', ':', 0xdc},
  779.     {'Y', '\'', 0xdd},
  780.     {'T', 'H', 0xde},
  781.     {'s', 's', 0xdf},
  782.     {'a', '!', 0xe0},
  783.     {'a', '\'', 0xe1},
  784.     {'a', '>', 0xe2},
  785.     {'a', '?', 0xe3},
  786.     {'a', ':', 0xe4},
  787.     {'a', 'a', 0xe5},
  788.     {'a', 'e', 0xe6},
  789.     {'c', ',', 0xe7},
  790.     {'e', '!', 0xe8},
  791.     {'e', '\'', 0xe9},
  792.     {'e', '>', 0xea},
  793.     {'e', ':', 0xeb},
  794.     {'i', '!', 0xec},
  795.     {'i', '\'', 0xed},
  796.     {'i', '>', 0xee},
  797.     {'i', ':', 0xef},
  798.     {'d', '-', 0xf0},
  799.     {'n', '?', 0xf1},
  800.     {'o', '!', 0xf2},
  801.     {'o', '\'', 0xf3},
  802.     {'o', '>', 0xf4},
  803.     {'o', '?', 0xf5},
  804.     {'o', ':', 0xf6},
  805.     {'-', ':', 0xf7},
  806.     {'o', '/', 0xf8},
  807.     {'u', '!', 0xf9},
  808.     {'u', '\'', 0xfa},
  809.     {'u', '>', 0xfb},
  810.     {'u', ':', 0xfc},
  811.     {'y', '\'', 0xfd},
  812.     {'t', 'h', 0xfe},
  813.     {'y', ':', 0xff},
  814.  
  815. #      ifdef FEAT_MBYTE
  816.  
  817.     {'A', '-', 0x0100},
  818.     {'a', '-', 0x0101},
  819.     {'A', '(', 0x0102},
  820.     {'a', '(', 0x0103},
  821.     {'A', ';', 0x0104},
  822.     {'a', ';', 0x0105},
  823.     {'C', '\'', 0x0106},
  824.     {'c', '\'', 0x0107},
  825.     {'C', '>', 0x0108},
  826.     {'c', '>', 0x0109},
  827.     {'C', '.', 0x010a},
  828.     {'c', '.', 0x010b},
  829.     {'C', '<', 0x010c},
  830.     {'c', '<', 0x010d},
  831.     {'D', '<', 0x010e},
  832.     {'d', '<', 0x010f},
  833.     {'D', '/', 0x0110},
  834.     {'d', '/', 0x0111},
  835.     {'E', '-', 0x0112},
  836.     {'e', '-', 0x0113},
  837.     {'E', '(', 0x0114},
  838.     {'e', '(', 0x0115},
  839.     {'E', '.', 0x0116},
  840.     {'e', '.', 0x0117},
  841.     {'E', ';', 0x0118},
  842.     {'e', ';', 0x0119},
  843.     {'E', '<', 0x011a},
  844.     {'e', '<', 0x011b},
  845.     {'G', '>', 0x011c},
  846.     {'g', '>', 0x011d},
  847.     {'G', '(', 0x011e},
  848.     {'g', '(', 0x011f},
  849.     {'G', '.', 0x0120},
  850.     {'g', '.', 0x0121},
  851.     {'G', ',', 0x0122},
  852.     {'g', ',', 0x0123},
  853.     {'H', '>', 0x0124},
  854.     {'h', '>', 0x0125},
  855.     {'H', '/', 0x0126},
  856.     {'h', '/', 0x0127},
  857.     {'I', '?', 0x0128},
  858.     {'i', '?', 0x0129},
  859.     {'I', '-', 0x012a},
  860.     {'i', '-', 0x012b},
  861.     {'I', '(', 0x012c},
  862.     {'i', '(', 0x012d},
  863.     {'I', ';', 0x012e},
  864.     {'i', ';', 0x012f},
  865.     {'I', '.', 0x0130},
  866.     {'i', '.', 0x0131},
  867.     {'I', 'J', 0x0132},
  868.     {'i', 'j', 0x0133},
  869.     {'J', '>', 0x0134},
  870.     {'j', '>', 0x0135},
  871.     {'K', ',', 0x0136},
  872.     {'k', ',', 0x0137},
  873.     {'k', 'k', 0x0138},
  874.     {'L', '\'', 0x0139},
  875.     {'l', '\'', 0x013a},
  876.     {'L', ',', 0x013b},
  877.     {'l', ',', 0x013c},
  878.     {'L', '<', 0x013d},
  879.     {'l', '<', 0x013e},
  880.     {'L', '.', 0x013f},
  881.     {'l', '.', 0x0140},
  882.     {'L', '/', 0x0141},
  883.     {'l', '/', 0x0142},
  884.     {'N', '\'', 0x0143},
  885.     {'n', '\'', 0x0144},
  886.     {'N', ',', 0x0145},
  887.     {'n', ',', 0x0146},
  888.     {'N', '<', 0x0147},
  889.     {'n', '<', 0x0148},
  890.     {'\'', 'n', 0x0149},
  891.     {'N', 'G', 0x014a},
  892.     {'n', 'g', 0x014b},
  893.     {'O', '-', 0x014c},
  894.     {'o', '-', 0x014d},
  895.     {'O', '(', 0x014e},
  896.     {'o', '(', 0x014f},
  897.     {'O', '"', 0x0150},
  898.     {'o', '"', 0x0151},
  899.     {'O', 'E', 0x0152},
  900.     {'o', 'e', 0x0153},
  901.     {'R', '\'', 0x0154},
  902.     {'r', '\'', 0x0155},
  903.     {'R', ',', 0x0156},
  904.     {'r', ',', 0x0157},
  905.     {'R', '<', 0x0158},
  906.     {'r', '<', 0x0159},
  907.     {'S', '\'', 0x015a},
  908.     {'s', '\'', 0x015b},
  909.     {'S', '>', 0x015c},
  910.     {'s', '>', 0x015d},
  911.     {'S', ',', 0x015e},
  912.     {'s', ',', 0x015f},
  913.     {'S', '<', 0x0160},
  914.     {'s', '<', 0x0161},
  915.     {'T', ',', 0x0162},
  916.     {'t', ',', 0x0163},
  917.     {'T', '<', 0x0164},
  918.     {'t', '<', 0x0165},
  919.     {'T', '/', 0x0166},
  920.     {'t', '/', 0x0167},
  921.     {'U', '?', 0x0168},
  922.     {'u', '?', 0x0169},
  923.     {'U', '-', 0x016a},
  924.     {'u', '-', 0x016b},
  925.     {'U', '(', 0x016c},
  926.     {'u', '(', 0x016d},
  927.     {'U', '0', 0x016e},
  928.     {'u', '0', 0x016f},
  929.     {'U', '"', 0x0170},
  930.     {'u', '"', 0x0171},
  931.     {'U', ';', 0x0172},
  932.     {'u', ';', 0x0173},
  933.     {'W', '>', 0x0174},
  934.     {'w', '>', 0x0175},
  935.     {'Y', '>', 0x0176},
  936.     {'y', '>', 0x0177},
  937.     {'Y', ':', 0x0178},
  938.     {'Z', '\'', 0x0179},
  939.     {'z', '\'', 0x017a},
  940.     {'Z', '.', 0x017b},
  941.     {'z', '.', 0x017c},
  942.     {'Z', '<', 0x017d},
  943.     {'z', '<', 0x017e},
  944.     {'O', '9', 0x01a0},
  945.     {'o', '9', 0x01a1},
  946.     {'O', 'I', 0x01a2},
  947.     {'o', 'i', 0x01a3},
  948.     {'y', 'r', 0x01a6},
  949.     {'U', '9', 0x01af},
  950.     {'u', '9', 0x01b0},
  951.     {'Z', '/', 0x01b5},
  952.     {'z', '/', 0x01b6},
  953.     {'E', 'D', 0x01b7},
  954.     {'A', '<', 0x01cd},
  955.     {'a', '<', 0x01ce},
  956.     {'I', '<', 0x01cf},
  957.     {'i', '<', 0x01d0},
  958.     {'O', '<', 0x01d1},
  959.     {'o', '<', 0x01d2},
  960.     {'U', '<', 0x01d3},
  961.     {'u', '<', 0x01d4},
  962.     {'A', '1', 0x01de},
  963.     {'a', '1', 0x01df},
  964.     {'A', '7', 0x01e0},
  965.     {'a', '7', 0x01e1},
  966.     {'A', '3', 0x01e2},
  967.     {'a', '3', 0x01e3},
  968.     {'G', '/', 0x01e4},
  969.     {'g', '/', 0x01e5},
  970.     {'G', '<', 0x01e6},
  971.     {'g', '<', 0x01e7},
  972.     {'K', '<', 0x01e8},
  973.     {'k', '<', 0x01e9},
  974.     {'O', ';', 0x01ea},
  975.     {'o', ';', 0x01eb},
  976.     {'O', '1', 0x01ec},
  977.     {'o', '1', 0x01ed},
  978.     {'E', 'Z', 0x01ee},
  979.     {'e', 'z', 0x01ef},
  980.     {'j', '<', 0x01f0},
  981.     {'G', '\'', 0x01f4},
  982.     {'g', '\'', 0x01f5},
  983.     {';', 'S', 0x02bf},
  984.     {'\'', '<', 0x02c7},
  985.     {'\'', '(', 0x02d8},
  986.     {'\'', '.', 0x02d9},
  987.     {'\'', '0', 0x02da},
  988.     {'\'', ';', 0x02db},
  989.     {'\'', '"', 0x02dd},
  990.     {'A', '%', 0x0386},
  991.     {'E', '%', 0x0388},
  992.     {'Y', '%', 0x0389},
  993.     {'I', '%', 0x038a},
  994.     {'O', '%', 0x038c},
  995.     {'U', '%', 0x038e},
  996.     {'W', '%', 0x038f},
  997.     {'i', '3', 0x0390},
  998.     {'A', '*', 0x0391},
  999.     {'B', '*', 0x0392},
  1000.     {'G', '*', 0x0393},
  1001.     {'D', '*', 0x0394},
  1002.     {'E', '*', 0x0395},
  1003.     {'Z', '*', 0x0396},
  1004.     {'Y', '*', 0x0397},
  1005.     {'H', '*', 0x0398},
  1006.     {'I', '*', 0x0399},
  1007.     {'K', '*', 0x039a},
  1008.     {'L', '*', 0x039b},
  1009.     {'M', '*', 0x039c},
  1010.     {'N', '*', 0x039d},
  1011.     {'C', '*', 0x039e},
  1012.     {'O', '*', 0x039f},
  1013.     {'P', '*', 0x03a0},
  1014.     {'R', '*', 0x03a1},
  1015.     {'S', '*', 0x03a3},
  1016.     {'T', '*', 0x03a4},
  1017.     {'U', '*', 0x03a5},
  1018.     {'F', '*', 0x03a6},
  1019.     {'X', '*', 0x03a7},
  1020.     {'Q', '*', 0x03a8},
  1021.     {'W', '*', 0x03a9},
  1022.     {'J', '*', 0x03aa},
  1023.     {'V', '*', 0x03ab},
  1024.     {'a', '%', 0x03ac},
  1025.     {'e', '%', 0x03ad},
  1026.     {'y', '%', 0x03ae},
  1027.     {'i', '%', 0x03af},
  1028.     {'u', '3', 0x03b0},
  1029.     {'a', '*', 0x03b1},
  1030.     {'b', '*', 0x03b2},
  1031.     {'g', '*', 0x03b3},
  1032.     {'d', '*', 0x03b4},
  1033.     {'e', '*', 0x03b5},
  1034.     {'z', '*', 0x03b6},
  1035.     {'y', '*', 0x03b7},
  1036.     {'h', '*', 0x03b8},
  1037.     {'i', '*', 0x03b9},
  1038.     {'k', '*', 0x03ba},
  1039.     {'l', '*', 0x03bb},
  1040.     {'m', '*', 0x03bc},
  1041.     {'n', '*', 0x03bd},
  1042.     {'c', '*', 0x03be},
  1043.     {'o', '*', 0x03bf},
  1044.     {'p', '*', 0x03c0},
  1045.     {'r', '*', 0x03c1},
  1046.     {'*', 's', 0x03c2},
  1047.     {'s', '*', 0x03c3},
  1048.     {'t', '*', 0x03c4},
  1049.     {'u', '*', 0x03c5},
  1050.     {'f', '*', 0x03c6},
  1051.     {'x', '*', 0x03c7},
  1052.     {'q', '*', 0x03c8},
  1053.     {'w', '*', 0x03c9},
  1054.     {'j', '*', 0x03ca},
  1055.     {'v', '*', 0x03cb},
  1056.     {'o', '%', 0x03cc},
  1057.     {'u', '%', 0x03cd},
  1058.     {'w', '%', 0x03ce},
  1059.     {'\'', 'G', 0x03d8},
  1060.     {',', 'G', 0x03d9},
  1061.     {'T', '3', 0x03da},
  1062.     {'t', '3', 0x03db},
  1063.     {'M', '3', 0x03dc},
  1064.     {'m', '3', 0x03dd},
  1065.     {'K', '3', 0x03de},
  1066.     {'k', '3', 0x03df},
  1067.     {'P', '3', 0x03e0},
  1068.     {'p', '3', 0x03e1},
  1069.     {'\'', '%', 0x03f4},
  1070.     {'j', '3', 0x03f5},
  1071.     {'I', 'O', 0x0401},
  1072.     {'D', '%', 0x0402},
  1073.     {'G', '%', 0x0403},
  1074.     {'I', 'E', 0x0404},
  1075.     {'D', 'S', 0x0405},
  1076.     {'I', 'I', 0x0406},
  1077.     {'Y', 'I', 0x0407},
  1078.     {'J', '%', 0x0408},
  1079.     {'L', 'J', 0x0409},
  1080.     {'N', 'J', 0x040a},
  1081.     {'T', 's', 0x040b},
  1082.     {'K', 'J', 0x040c},
  1083.     {'V', '%', 0x040e},
  1084.     {'D', 'Z', 0x040f},
  1085.     {'A', '=', 0x0410},
  1086.     {'B', '=', 0x0411},
  1087.     {'V', '=', 0x0412},
  1088.     {'G', '=', 0x0413},
  1089.     {'D', '=', 0x0414},
  1090.     {'E', '=', 0x0415},
  1091.     {'Z', '%', 0x0416},
  1092.     {'Z', '=', 0x0417},
  1093.     {'I', '=', 0x0418},
  1094.     {'J', '=', 0x0419},
  1095.     {'K', '=', 0x041a},
  1096.     {'L', '=', 0x041b},
  1097.     {'M', '=', 0x041c},
  1098.     {'N', '=', 0x041d},
  1099.     {'O', '=', 0x041e},
  1100.     {'P', '=', 0x041f},
  1101.     {'R', '=', 0x0420},
  1102.     {'S', '=', 0x0421},
  1103.     {'T', '=', 0x0422},
  1104.     {'U', '=', 0x0423},
  1105.     {'F', '=', 0x0424},
  1106.     {'H', '=', 0x0425},
  1107.     {'C', '=', 0x0426},
  1108.     {'C', '%', 0x0427},
  1109.     {'S', '%', 0x0428},
  1110.     {'S', 'c', 0x0429},
  1111.     {'=', '"', 0x042a},
  1112.     {'Y', '=', 0x042b},
  1113.     {'%', '"', 0x042c},
  1114.     {'J', 'E', 0x042d},
  1115.     {'J', 'U', 0x042e},
  1116.     {'J', 'A', 0x042f},
  1117.     {'a', '=', 0x0430},
  1118.     {'b', '=', 0x0431},
  1119.     {'v', '=', 0x0432},
  1120.     {'g', '=', 0x0433},
  1121.     {'d', '=', 0x0434},
  1122.     {'e', '=', 0x0435},
  1123.     {'z', '%', 0x0436},
  1124.     {'z', '=', 0x0437},
  1125.     {'i', '=', 0x0438},
  1126.     {'j', '=', 0x0439},
  1127.     {'k', '=', 0x043a},
  1128.     {'l', '=', 0x043b},
  1129.     {'m', '=', 0x043c},
  1130.     {'n', '=', 0x043d},
  1131.     {'o', '=', 0x043e},
  1132.     {'p', '=', 0x043f},
  1133.     {'r', '=', 0x0440},
  1134.     {'s', '=', 0x0441},
  1135.     {'t', '=', 0x0442},
  1136.     {'u', '=', 0x0443},
  1137.     {'f', '=', 0x0444},
  1138.     {'h', '=', 0x0445},
  1139.     {'c', '=', 0x0446},
  1140.     {'c', '%', 0x0447},
  1141.     {'s', '%', 0x0448},
  1142.     {'s', 'c', 0x0449},
  1143.     {'=', '\'', 0x044a},
  1144.     {'y', '=', 0x044b},
  1145.     {'%', '\'', 0x044c},
  1146.     {'j', 'e', 0x044d},
  1147.     {'j', 'u', 0x044e},
  1148.     {'j', 'a', 0x044f},
  1149.     {'i', 'o', 0x0451},
  1150.     {'d', '%', 0x0452},
  1151.     {'g', '%', 0x0453},
  1152.     {'i', 'e', 0x0454},
  1153.     {'d', 's', 0x0455},
  1154.     {'i', 'i', 0x0456},
  1155.     {'y', 'i', 0x0457},
  1156.     {'j', '%', 0x0458},
  1157.     {'l', 'j', 0x0459},
  1158.     {'n', 'j', 0x045a},
  1159.     {'t', 's', 0x045b},
  1160.     {'k', 'j', 0x045c},
  1161.     {'v', '%', 0x045e},
  1162.     {'d', 'z', 0x045f},
  1163.     {'Y', '3', 0x0462},
  1164.     {'y', '3', 0x0463},
  1165.     {'O', '3', 0x046a},
  1166.     {'o', '3', 0x046b},
  1167.     {'F', '3', 0x0472},
  1168.     {'f', '3', 0x0473},
  1169.     {'V', '3', 0x0474},
  1170.     {'v', '3', 0x0475},
  1171.     {'C', '3', 0x0480},
  1172.     {'c', '3', 0x0481},
  1173.     {'G', '3', 0x0490},
  1174.     {'g', '3', 0x0491},
  1175.     {'A', '+', 0x05d0},
  1176.     {'B', '+', 0x05d1},
  1177.     {'G', '+', 0x05d2},
  1178.     {'D', '+', 0x05d3},
  1179.     {'H', '+', 0x05d4},
  1180.     {'W', '+', 0x05d5},
  1181.     {'Z', '+', 0x05d6},
  1182.     {'X', '+', 0x05d7},
  1183.     {'T', 'j', 0x05d8},
  1184.     {'J', '+', 0x05d9},
  1185.     {'K', '%', 0x05da},
  1186.     {'K', '+', 0x05db},
  1187.     {'L', '+', 0x05dc},
  1188.     {'M', '%', 0x05dd},
  1189.     {'M', '+', 0x05de},
  1190.     {'N', '%', 0x05df},
  1191.     {'N', '+', 0x05e0},
  1192.     {'S', '+', 0x05e1},
  1193.     {'E', '+', 0x05e2},
  1194.     {'P', '%', 0x05e3},
  1195.     {'P', '+', 0x05e4},
  1196.     {'Z', 'j', 0x05e5},
  1197.     {'Z', 'J', 0x05e6},
  1198.     {'Q', '+', 0x05e7},
  1199.     {'R', '+', 0x05e8},
  1200.     {'S', 'h', 0x05e9},
  1201.     {'T', '+', 0x05ea},
  1202.     {',', '+', 0x060c},
  1203.     {';', '+', 0x061b},
  1204.     {'?', '+', 0x061f},
  1205.     {'H', '\'', 0x0621},
  1206.     {'a', 'M', 0x0622},
  1207.     {'a', 'H', 0x0623},
  1208.     {'w', 'H', 0x0624},
  1209.     {'a', 'h', 0x0625},
  1210.     {'y', 'H', 0x0626},
  1211.     {'a', '+', 0x0627},
  1212.     {'b', '+', 0x0628},
  1213.     {'t', 'm', 0x0629},
  1214.     {'t', '+', 0x062a},
  1215.     {'t', 'k', 0x062b},
  1216.     {'g', '+', 0x062c},
  1217.     {'h', 'k', 0x062d},
  1218.     {'x', '+', 0x062e},
  1219.     {'d', '+', 0x062f},
  1220.     {'d', 'k', 0x0630},
  1221.     {'r', '+', 0x0631},
  1222.     {'z', '+', 0x0632},
  1223.     {'s', '+', 0x0633},
  1224.     {'s', 'n', 0x0634},
  1225.     {'c', '+', 0x0635},
  1226.     {'d', 'd', 0x0636},
  1227.     {'t', 'j', 0x0637},
  1228.     {'z', 'H', 0x0638},
  1229.     {'e', '+', 0x0639},
  1230.     {'i', '+', 0x063a},
  1231.     {'+', '+', 0x0640},
  1232.     {'f', '+', 0x0641},
  1233.     {'q', '+', 0x0642},
  1234.     {'k', '+', 0x0643},
  1235.     {'l', '+', 0x0644},
  1236.     {'m', '+', 0x0645},
  1237.     {'n', '+', 0x0646},
  1238.     {'h', '+', 0x0647},
  1239.     {'w', '+', 0x0648},
  1240.     {'j', '+', 0x0649},
  1241.     {'y', '+', 0x064a},
  1242.     {':', '+', 0x064b},
  1243.     {'"', '+', 0x064c},
  1244.     {'=', '+', 0x064d},
  1245.     {'/', '+', 0x064e},
  1246.     {'\'', '+', 0x064f},
  1247.     {'1', '+', 0x0650},
  1248.     {'3', '+', 0x0651},
  1249.     {'0', '+', 0x0652},
  1250.     {'a', 'S', 0x0670},
  1251.     {'p', '+', 0x067e},
  1252.     {'v', '+', 0x06a4},
  1253.     {'g', 'f', 0x06af},
  1254.     {'0', 'a', 0x06f0},
  1255.     {'1', 'a', 0x06f1},
  1256.     {'2', 'a', 0x06f2},
  1257.     {'3', 'a', 0x06f3},
  1258.     {'4', 'a', 0x06f4},
  1259.     {'5', 'a', 0x06f5},
  1260.     {'6', 'a', 0x06f6},
  1261.     {'7', 'a', 0x06f7},
  1262.     {'8', 'a', 0x06f8},
  1263.     {'9', 'a', 0x06f9},
  1264.     {'B', '.', 0x1e02},
  1265.     {'b', '.', 0x1e03},
  1266.     {'B', '_', 0x1e06},
  1267.     {'b', '_', 0x1e07},
  1268.     {'D', '.', 0x1e0a},
  1269.     {'d', '.', 0x1e0b},
  1270.     {'D', '_', 0x1e0e},
  1271.     {'d', '_', 0x1e0f},
  1272.     {'D', ',', 0x1e10},
  1273.     {'d', ',', 0x1e11},
  1274.     {'F', '.', 0x1e1e},
  1275.     {'f', '.', 0x1e1f},
  1276.     {'G', '-', 0x1e20},
  1277.     {'g', '-', 0x1e21},
  1278.     {'H', '.', 0x1e22},
  1279.     {'h', '.', 0x1e23},
  1280.     {'H', ':', 0x1e26},
  1281.     {'h', ':', 0x1e27},
  1282.     {'H', ',', 0x1e28},
  1283.     {'h', ',', 0x1e29},
  1284.     {'K', '\'', 0x1e30},
  1285.     {'k', '\'', 0x1e31},
  1286.     {'K', '_', 0x1e34},
  1287.     {'k', '_', 0x1e35},
  1288.     {'L', '_', 0x1e3a},
  1289.     {'l', '_', 0x1e3b},
  1290.     {'M', '\'', 0x1e3e},
  1291.     {'m', '\'', 0x1e3f},
  1292.     {'M', '.', 0x1e40},
  1293.     {'m', '.', 0x1e41},
  1294.     {'N', '.', 0x1e44},
  1295.     {'n', '.', 0x1e45},
  1296.     {'N', '_', 0x1e48},
  1297.     {'n', '_', 0x1e49},
  1298.     {'P', '\'', 0x1e54},
  1299.     {'p', '\'', 0x1e55},
  1300.     {'P', '.', 0x1e56},
  1301.     {'p', '.', 0x1e57},
  1302.     {'R', '.', 0x1e58},
  1303.     {'r', '.', 0x1e59},
  1304.     {'R', '_', 0x1e5e},
  1305.     {'r', '_', 0x1e5f},
  1306.     {'S', '.', 0x1e60},
  1307.     {'s', '.', 0x1e61},
  1308.     {'T', '.', 0x1e6a},
  1309.     {'t', '.', 0x1e6b},
  1310.     {'T', '_', 0x1e6e},
  1311.     {'t', '_', 0x1e6f},
  1312.     {'V', '?', 0x1e7c},
  1313.     {'v', '?', 0x1e7d},
  1314.     {'W', '!', 0x1e80},
  1315.     {'w', '!', 0x1e81},
  1316.     {'W', '\'', 0x1e82},
  1317.     {'w', '\'', 0x1e83},
  1318.     {'W', ':', 0x1e84},
  1319.     {'w', ':', 0x1e85},
  1320.     {'W', '.', 0x1e86},
  1321.     {'w', '.', 0x1e87},
  1322.     {'X', '.', 0x1e8a},
  1323.     {'x', '.', 0x1e8b},
  1324.     {'X', ':', 0x1e8c},
  1325.     {'x', ':', 0x1e8d},
  1326.     {'Y', '.', 0x1e8e},
  1327.     {'y', '.', 0x1e8f},
  1328.     {'Z', '>', 0x1e90},
  1329.     {'z', '>', 0x1e91},
  1330.     {'Z', '_', 0x1e94},
  1331.     {'z', '_', 0x1e95},
  1332.     {'h', '_', 0x1e96},
  1333.     {'t', ':', 0x1e97},
  1334.     {'w', '0', 0x1e98},
  1335.     {'y', '0', 0x1e99},
  1336.     {'A', '2', 0x1ea2},
  1337.     {'a', '2', 0x1ea3},
  1338.     {'E', '2', 0x1eba},
  1339.     {'e', '2', 0x1ebb},
  1340.     {'E', '?', 0x1ebc},
  1341.     {'e', '?', 0x1ebd},
  1342.     {'I', '2', 0x1ec8},
  1343.     {'i', '2', 0x1ec9},
  1344.     {'O', '2', 0x1ece},
  1345.     {'o', '2', 0x1ecf},
  1346.     {'U', '2', 0x1ee6},
  1347.     {'u', '2', 0x1ee7},
  1348.     {'Y', '!', 0x1ef2},
  1349.     {'y', '!', 0x1ef3},
  1350.     {'Y', '2', 0x1ef6},
  1351.     {'y', '2', 0x1ef7},
  1352.     {'Y', '?', 0x1ef8},
  1353.     {'y', '?', 0x1ef9},
  1354.     {';', '\'', 0x1f00},
  1355.     {',', '\'', 0x1f01},
  1356.     {';', '!', 0x1f02},
  1357.     {',', '!', 0x1f03},
  1358.     {'?', ';', 0x1f04},
  1359.     {'?', ',', 0x1f05},
  1360.     {'!', ':', 0x1f06},
  1361.     {'?', ':', 0x1f07},
  1362.     {'1', 'N', 0x2002},
  1363.     {'1', 'M', 0x2003},
  1364.     {'3', 'M', 0x2004},
  1365.     {'4', 'M', 0x2005},
  1366.     {'6', 'M', 0x2006},
  1367.     {'1', 'T', 0x2009},
  1368.     {'1', 'H', 0x200a},
  1369.     {'-', '1', 0x2010},
  1370.     {'-', 'N', 0x2013},
  1371.     {'-', 'M', 0x2014},
  1372.     {'-', '3', 0x2015},
  1373.     {'!', '2', 0x2016},
  1374.     {'=', '2', 0x2017},
  1375.     {'\'', '6', 0x2018},
  1376.     {'\'', '9', 0x2019},
  1377.     {'.', '9', 0x201a},
  1378.     {'9', '\'', 0x201b},
  1379.     {'"', '6', 0x201c},
  1380.     {'"', '9', 0x201d},
  1381.     {':', '9', 0x201e},
  1382.     {'9', '"', 0x201f},
  1383.     {'/', '-', 0x2020},
  1384.     {'/', '=', 0x2021},
  1385.     {'.', '.', 0x2025},
  1386.     {'%', '0', 0x2030},
  1387.     {'1', '\'', 0x2032},
  1388.     {'2', '\'', 0x2033},
  1389.     {'3', '\'', 0x2034},
  1390.     {'1', '"', 0x2035},
  1391.     {'2', '"', 0x2036},
  1392.     {'3', '"', 0x2037},
  1393.     {'C', 'a', 0x2038},
  1394.     {'<', '1', 0x2039},
  1395.     {'>', '1', 0x203a},
  1396.     {':', 'X', 0x203b},
  1397.     {'\'', '-', 0x203e},
  1398.     {'/', 'f', 0x2044},
  1399.     {'0', 'S', 0x2070},
  1400.     {'4', 'S', 0x2074},
  1401.     {'5', 'S', 0x2075},
  1402.     {'6', 'S', 0x2076},
  1403.     {'7', 'S', 0x2077},
  1404.     {'8', 'S', 0x2078},
  1405.     {'9', 'S', 0x2079},
  1406.     {'+', 'S', 0x207a},
  1407.     {'-', 'S', 0x207b},
  1408.     {'=', 'S', 0x207c},
  1409.     {'(', 'S', 0x207d},
  1410.     {')', 'S', 0x207e},
  1411.     {'n', 'S', 0x207f},
  1412.     {'0', 's', 0x2080},
  1413.     {'1', 's', 0x2081},
  1414.     {'2', 's', 0x2082},
  1415.     {'3', 's', 0x2083},
  1416.     {'4', 's', 0x2084},
  1417.     {'5', 's', 0x2085},
  1418.     {'6', 's', 0x2086},
  1419.     {'7', 's', 0x2087},
  1420.     {'8', 's', 0x2088},
  1421.     {'9', 's', 0x2089},
  1422.     {'+', 's', 0x208a},
  1423.     {'-', 's', 0x208b},
  1424.     {'=', 's', 0x208c},
  1425.     {'(', 's', 0x208d},
  1426.     {')', 's', 0x208e},
  1427.     {'L', 'i', 0x20a4},
  1428.     {'P', 't', 0x20a7},
  1429.     {'W', '=', 0x20a9},
  1430.     {'o', 'C', 0x2103},
  1431.     {'c', 'o', 0x2105},
  1432.     {'o', 'F', 0x2109},
  1433.     {'N', '0', 0x2116},
  1434.     {'P', 'O', 0x2117},
  1435.     {'R', 'x', 0x211e},
  1436.     {'S', 'M', 0x2120},
  1437.     {'T', 'M', 0x2122},
  1438.     {'O', 'm', 0x2126},
  1439.     {'A', 'O', 0x212b},
  1440.     {'1', '3', 0x2153},
  1441.     {'2', '3', 0x2154},
  1442.     {'1', '5', 0x2155},
  1443.     {'2', '5', 0x2156},
  1444.     {'3', '5', 0x2157},
  1445.     {'4', '5', 0x2158},
  1446.     {'1', '6', 0x2159},
  1447.     {'5', '6', 0x215a},
  1448.     {'1', '8', 0x215b},
  1449.     {'3', '8', 0x215c},
  1450.     {'5', '8', 0x215d},
  1451.     {'7', '8', 0x215e},
  1452.     {'1', 'R', 0x2160},
  1453.     {'2', 'R', 0x2161},
  1454.     {'3', 'R', 0x2162},
  1455.     {'4', 'R', 0x2163},
  1456.     {'5', 'R', 0x2164},
  1457.     {'6', 'R', 0x2165},
  1458.     {'7', 'R', 0x2166},
  1459.     {'8', 'R', 0x2167},
  1460.     {'9', 'R', 0x2168},
  1461.     {'a', 'R', 0x2169},
  1462.     {'b', 'R', 0x216a},
  1463.     {'c', 'R', 0x216b},
  1464.     {'1', 'r', 0x2170},
  1465.     {'2', 'r', 0x2171},
  1466.     {'3', 'r', 0x2172},
  1467.     {'4', 'r', 0x2173},
  1468.     {'5', 'r', 0x2174},
  1469.     {'6', 'r', 0x2175},
  1470.     {'7', 'r', 0x2176},
  1471.     {'8', 'r', 0x2177},
  1472.     {'9', 'r', 0x2178},
  1473.     {'a', 'r', 0x2179},
  1474.     {'b', 'r', 0x217a},
  1475.     {'c', 'r', 0x217b},
  1476.     {'<', '-', 0x2190},
  1477.     {'-', '!', 0x2191},
  1478.     {'-', '>', 0x2192},
  1479.     {'-', 'v', 0x2193},
  1480.     {'<', '>', 0x2194},
  1481.     {'U', 'D', 0x2195},
  1482.     {'<', '=', 0x21d0},
  1483.     {'=', '>', 0x21d2},
  1484.     {'=', '=', 0x21d4},
  1485.     {'F', 'A', 0x2200},
  1486.     {'d', 'P', 0x2202},
  1487.     {'T', 'E', 0x2203},
  1488.     {'/', '0', 0x2205},
  1489.     {'D', 'E', 0x2206},
  1490.     {'N', 'B', 0x2207},
  1491.     {'(', '-', 0x2208},
  1492.     {'-', ')', 0x220b},
  1493.     {'*', 'P', 0x220f},
  1494.     {'+', 'Z', 0x2211},
  1495.     {'-', '2', 0x2212},
  1496.     {'-', '+', 0x2213},
  1497.     {'*', '-', 0x2217},
  1498.     {'O', 'b', 0x2218},
  1499.     {'S', 'b', 0x2219},
  1500.     {'R', 'T', 0x221a},
  1501.     {'0', '(', 0x221d},
  1502.     {'0', '0', 0x221e},
  1503.     {'-', 'L', 0x221f},
  1504.     {'-', 'V', 0x2220},
  1505.     {'P', 'P', 0x2225},
  1506.     {'A', 'N', 0x2227},
  1507.     {'O', 'R', 0x2228},
  1508.     {'(', 'U', 0x2229},
  1509.     {')', 'U', 0x222a},
  1510.     {'I', 'n', 0x222b},
  1511.     {'D', 'I', 0x222c},
  1512.     {'I', 'o', 0x222e},
  1513.     {'.', ':', 0x2234},
  1514.     {':', '.', 0x2235},
  1515.     {':', 'R', 0x2236},
  1516.     {':', ':', 0x2237},
  1517.     {'?', '1', 0x223c},
  1518.     {'C', 'G', 0x223e},
  1519.     {'?', '-', 0x2243},
  1520.     {'?', '=', 0x2245},
  1521.     {'?', '2', 0x2248},
  1522.     {'=', '?', 0x224c},
  1523.     {'H', 'I', 0x2253},
  1524.     {'!', '=', 0x2260},
  1525.     {'=', '3', 0x2261},
  1526.     {'=', '<', 0x2264},
  1527.     {'>', '=', 0x2265},
  1528.     {'<', '*', 0x226a},
  1529.     {'*', '>', 0x226b},
  1530.     {'!', '<', 0x226e},
  1531.     {'!', '>', 0x226f},
  1532.     {'(', 'C', 0x2282},
  1533.     {')', 'C', 0x2283},
  1534.     {'(', '_', 0x2286},
  1535.     {')', '_', 0x2287},
  1536.     {'0', '.', 0x2299},
  1537.     {'0', '2', 0x229a},
  1538.     {'-', 'T', 0x22a5},
  1539.     {'.', 'P', 0x22c5},
  1540.     {':', '3', 0x22ee},
  1541.     {'.', '3', 0x22ef},
  1542.     {'E', 'h', 0x2302},
  1543.     {'<', '7', 0x2308},
  1544.     {'>', '7', 0x2309},
  1545.     {'7', '<', 0x230a},
  1546.     {'7', '>', 0x230b},
  1547.     {'N', 'I', 0x2310},
  1548.     {'(', 'A', 0x2312},
  1549.     {'T', 'R', 0x2315},
  1550.     {'I', 'u', 0x2320},
  1551.     {'I', 'l', 0x2321},
  1552.     {'<', '/', 0x2329},
  1553.     {'/', '>', 0x232a},
  1554.     {'V', 's', 0x2423},
  1555.     {'1', 'h', 0x2440},
  1556.     {'3', 'h', 0x2441},
  1557.     {'2', 'h', 0x2442},
  1558.     {'4', 'h', 0x2443},
  1559.     {'1', 'j', 0x2446},
  1560.     {'2', 'j', 0x2447},
  1561.     {'3', 'j', 0x2448},
  1562.     {'4', 'j', 0x2449},
  1563.     {'1', '.', 0x2488},
  1564.     {'2', '.', 0x2489},
  1565.     {'3', '.', 0x248a},
  1566.     {'4', '.', 0x248b},
  1567.     {'5', '.', 0x248c},
  1568.     {'6', '.', 0x248d},
  1569.     {'7', '.', 0x248e},
  1570.     {'8', '.', 0x248f},
  1571.     {'9', '.', 0x2490},
  1572.     {'h', 'h', 0x2500},
  1573.     {'H', 'H', 0x2501},
  1574.     {'v', 'v', 0x2502},
  1575.     {'V', 'V', 0x2503},
  1576.     {'3', '-', 0x2504},
  1577.     {'3', '_', 0x2505},
  1578.     {'3', '!', 0x2506},
  1579.     {'3', '/', 0x2507},
  1580.     {'4', '-', 0x2508},
  1581.     {'4', '_', 0x2509},
  1582.     {'4', '!', 0x250a},
  1583.     {'4', '/', 0x250b},
  1584.     {'d', 'r', 0x250c},
  1585.     {'d', 'R', 0x250d},
  1586.     {'D', 'r', 0x250e},
  1587.     {'D', 'R', 0x250f},
  1588.     {'d', 'l', 0x2510},
  1589.     {'d', 'L', 0x2511},
  1590.     {'D', 'l', 0x2512},
  1591.     {'L', 'D', 0x2513},
  1592.     {'u', 'r', 0x2514},
  1593.     {'u', 'R', 0x2515},
  1594.     {'U', 'r', 0x2516},
  1595.     {'U', 'R', 0x2517},
  1596.     {'u', 'l', 0x2518},
  1597.     {'u', 'L', 0x2519},
  1598.     {'U', 'l', 0x251a},
  1599.     {'U', 'L', 0x251b},
  1600.     {'v', 'r', 0x251c},
  1601.     {'v', 'R', 0x251d},
  1602.     {'V', 'r', 0x2520},
  1603.     {'V', 'R', 0x2523},
  1604.     {'v', 'l', 0x2524},
  1605.     {'v', 'L', 0x2525},
  1606.     {'V', 'l', 0x2528},
  1607.     {'V', 'L', 0x252b},
  1608.     {'d', 'h', 0x252c},
  1609.     {'d', 'H', 0x252f},
  1610.     {'D', 'h', 0x2530},
  1611.     {'D', 'H', 0x2533},
  1612.     {'u', 'h', 0x2534},
  1613.     {'u', 'H', 0x2537},
  1614.     {'U', 'h', 0x2538},
  1615.     {'U', 'H', 0x253b},
  1616.     {'v', 'h', 0x253c},
  1617.     {'v', 'H', 0x253f},
  1618.     {'V', 'h', 0x2542},
  1619.     {'V', 'H', 0x254b},
  1620.     {'F', 'D', 0x2571},
  1621.     {'B', 'D', 0x2572},
  1622.     {'T', 'B', 0x2580},
  1623.     {'L', 'B', 0x2584},
  1624.     {'F', 'B', 0x2588},
  1625.     {'l', 'B', 0x258c},
  1626.     {'R', 'B', 0x2590},
  1627.     {'.', 'S', 0x2591},
  1628.     {':', 'S', 0x2592},
  1629.     {'?', 'S', 0x2593},
  1630.     {'f', 'S', 0x25a0},
  1631.     {'O', 'S', 0x25a1},
  1632.     {'R', 'O', 0x25a2},
  1633.     {'R', 'r', 0x25a3},
  1634.     {'R', 'F', 0x25a4},
  1635.     {'R', 'Y', 0x25a5},
  1636.     {'R', 'H', 0x25a6},
  1637.     {'R', 'Z', 0x25a7},
  1638.     {'R', 'K', 0x25a8},
  1639.     {'R', 'X', 0x25a9},
  1640.     {'s', 'B', 0x25aa},
  1641.     {'S', 'R', 0x25ac},
  1642.     {'O', 'r', 0x25ad},
  1643.     {'U', 'T', 0x25b2},
  1644.     {'u', 'T', 0x25b3},
  1645.     {'P', 'R', 0x25b6},
  1646.     {'T', 'r', 0x25b7},
  1647.     {'D', 't', 0x25bc},
  1648.     {'d', 'T', 0x25bd},
  1649.     {'P', 'L', 0x25c0},
  1650.     {'T', 'l', 0x25c1},
  1651.     {'D', 'b', 0x25c6},
  1652.     {'D', 'w', 0x25c7},
  1653.     {'L', 'Z', 0x25ca},
  1654.     {'0', 'm', 0x25cb},
  1655.     {'0', 'o', 0x25ce},
  1656.     {'0', 'M', 0x25cf},
  1657.     {'0', 'L', 0x25d0},
  1658.     {'0', 'R', 0x25d1},
  1659.     {'S', 'n', 0x25d8},
  1660.     {'I', 'c', 0x25d9},
  1661.     {'F', 'd', 0x25e2},
  1662.     {'B', 'd', 0x25e3},
  1663.     {'*', '2', 0x2605},
  1664.     {'*', '1', 0x2606},
  1665.     {'<', 'H', 0x261c},
  1666.     {'>', 'H', 0x261e},
  1667.     {'0', 'u', 0x263a},
  1668.     {'0', 'U', 0x263b},
  1669.     {'S', 'U', 0x263c},
  1670.     {'F', 'm', 0x2640},
  1671.     {'M', 'l', 0x2642},
  1672.     {'c', 'S', 0x2660},
  1673.     {'c', 'H', 0x2661},
  1674.     {'c', 'D', 0x2662},
  1675.     {'c', 'C', 0x2663},
  1676.     {'M', 'd', 0x2669},
  1677.     {'M', '8', 0x266a},
  1678.     {'M', '2', 0x266b},
  1679.     {'M', 'b', 0x266d},
  1680.     {'M', 'x', 0x266e},
  1681.     {'M', 'X', 0x266f},
  1682.     {'O', 'K', 0x2713},
  1683.     {'X', 'X', 0x2717},
  1684.     {'-', 'X', 0x2720},
  1685.     {'I', 'S', 0x3000},
  1686.     {',', '_', 0x3001},
  1687.     {'.', '_', 0x3002},
  1688.     {'+', '"', 0x3003},
  1689.     {'+', '_', 0x3004},
  1690.     {'*', '_', 0x3005},
  1691.     {';', '_', 0x3006},
  1692.     {'0', '_', 0x3007},
  1693.     {'<', '+', 0x300a},
  1694.     {'>', '+', 0x300b},
  1695.     {'<', '\'', 0x300c},
  1696.     {'>', '\'', 0x300d},
  1697.     {'<', '"', 0x300e},
  1698.     {'>', '"', 0x300f},
  1699.     {'(', '"', 0x3010},
  1700.     {')', '"', 0x3011},
  1701.     {'=', 'T', 0x3012},
  1702.     {'=', '_', 0x3013},
  1703.     {'(', '\'', 0x3014},
  1704.     {')', '\'', 0x3015},
  1705.     {'(', 'I', 0x3016},
  1706.     {')', 'I', 0x3017},
  1707.     {'-', '?', 0x301c},
  1708.     {'A', '5', 0x3041},
  1709.     {'a', '5', 0x3042},
  1710.     {'I', '5', 0x3043},
  1711.     {'i', '5', 0x3044},
  1712.     {'U', '5', 0x3045},
  1713.     {'u', '5', 0x3046},
  1714.     {'E', '5', 0x3047},
  1715.     {'e', '5', 0x3048},
  1716.     {'O', '5', 0x3049},
  1717.     {'o', '5', 0x304a},
  1718.     {'k', 'a', 0x304b},
  1719.     {'g', 'a', 0x304c},
  1720.     {'k', 'i', 0x304d},
  1721.     {'g', 'i', 0x304e},
  1722.     {'k', 'u', 0x304f},
  1723.     {'g', 'u', 0x3050},
  1724.     {'k', 'e', 0x3051},
  1725.     {'g', 'e', 0x3052},
  1726.     {'k', 'o', 0x3053},
  1727.     {'g', 'o', 0x3054},
  1728.     {'s', 'a', 0x3055},
  1729.     {'z', 'a', 0x3056},
  1730.     {'s', 'i', 0x3057},
  1731.     {'z', 'i', 0x3058},
  1732.     {'s', 'u', 0x3059},
  1733.     {'z', 'u', 0x305a},
  1734.     {'s', 'e', 0x305b},
  1735.     {'z', 'e', 0x305c},
  1736.     {'s', 'o', 0x305d},
  1737.     {'z', 'o', 0x305e},
  1738.     {'t', 'a', 0x305f},
  1739.     {'d', 'a', 0x3060},
  1740.     {'t', 'i', 0x3061},
  1741.     {'d', 'i', 0x3062},
  1742.     {'t', 'U', 0x3063},
  1743.     {'t', 'u', 0x3064},
  1744.     {'d', 'u', 0x3065},
  1745.     {'t', 'e', 0x3066},
  1746.     {'d', 'e', 0x3067},
  1747.     {'t', 'o', 0x3068},
  1748.     {'d', 'o', 0x3069},
  1749.     {'n', 'a', 0x306a},
  1750.     {'n', 'i', 0x306b},
  1751.     {'n', 'u', 0x306c},
  1752.     {'n', 'e', 0x306d},
  1753.     {'n', 'o', 0x306e},
  1754.     {'h', 'a', 0x306f},
  1755.     {'b', 'a', 0x3070},
  1756.     {'p', 'a', 0x3071},
  1757.     {'h', 'i', 0x3072},
  1758.     {'b', 'i', 0x3073},
  1759.     {'p', 'i', 0x3074},
  1760.     {'h', 'u', 0x3075},
  1761.     {'b', 'u', 0x3076},
  1762.     {'p', 'u', 0x3077},
  1763.     {'h', 'e', 0x3078},
  1764.     {'b', 'e', 0x3079},
  1765.     {'p', 'e', 0x307a},
  1766.     {'h', 'o', 0x307b},
  1767.     {'b', 'o', 0x307c},
  1768.     {'p', 'o', 0x307d},
  1769.     {'m', 'a', 0x307e},
  1770.     {'m', 'i', 0x307f},
  1771.     {'m', 'u', 0x3080},
  1772.     {'m', 'e', 0x3081},
  1773.     {'m', 'o', 0x3082},
  1774.     {'y', 'A', 0x3083},
  1775.     {'y', 'a', 0x3084},
  1776.     {'y', 'U', 0x3085},
  1777.     {'y', 'u', 0x3086},
  1778.     {'y', 'O', 0x3087},
  1779.     {'y', 'o', 0x3088},
  1780.     {'r', 'a', 0x3089},
  1781.     {'r', 'i', 0x308a},
  1782.     {'r', 'u', 0x308b},
  1783.     {'r', 'e', 0x308c},
  1784.     {'r', 'o', 0x308d},
  1785.     {'w', 'A', 0x308e},
  1786.     {'w', 'a', 0x308f},
  1787.     {'w', 'i', 0x3090},
  1788.     {'w', 'e', 0x3091},
  1789.     {'w', 'o', 0x3092},
  1790.     {'n', '5', 0x3093},
  1791.     {'v', 'u', 0x3094},
  1792.     {'"', '5', 0x309b},
  1793.     {'0', '5', 0x309c},
  1794.     {'*', '5', 0x309d},
  1795.     {'+', '5', 0x309e},
  1796.     {'a', '6', 0x30a1},
  1797.     {'A', '6', 0x30a2},
  1798.     {'i', '6', 0x30a3},
  1799.     {'I', '6', 0x30a4},
  1800.     {'u', '6', 0x30a5},
  1801.     {'U', '6', 0x30a6},
  1802.     {'e', '6', 0x30a7},
  1803.     {'E', '6', 0x30a8},
  1804.     {'o', '6', 0x30a9},
  1805.     {'O', '6', 0x30aa},
  1806.     {'K', 'a', 0x30ab},
  1807.     {'G', 'a', 0x30ac},
  1808.     {'K', 'i', 0x30ad},
  1809.     {'G', 'i', 0x30ae},
  1810.     {'K', 'u', 0x30af},
  1811.     {'G', 'u', 0x30b0},
  1812.     {'K', 'e', 0x30b1},
  1813.     {'G', 'e', 0x30b2},
  1814.     {'K', 'o', 0x30b3},
  1815.     {'G', 'o', 0x30b4},
  1816.     {'S', 'a', 0x30b5},
  1817.     {'Z', 'a', 0x30b6},
  1818.     {'S', 'i', 0x30b7},
  1819.     {'Z', 'i', 0x30b8},
  1820.     {'S', 'u', 0x30b9},
  1821.     {'Z', 'u', 0x30ba},
  1822.     {'S', 'e', 0x30bb},
  1823.     {'Z', 'e', 0x30bc},
  1824.     {'S', 'o', 0x30bd},
  1825.     {'Z', 'o', 0x30be},
  1826.     {'T', 'a', 0x30bf},
  1827.     {'D', 'a', 0x30c0},
  1828.     {'T', 'i', 0x30c1},
  1829.     {'D', 'i', 0x30c2},
  1830.     {'T', 'U', 0x30c3},
  1831.     {'T', 'u', 0x30c4},
  1832.     {'D', 'u', 0x30c5},
  1833.     {'T', 'e', 0x30c6},
  1834.     {'D', 'e', 0x30c7},
  1835.     {'T', 'o', 0x30c8},
  1836.     {'D', 'o', 0x30c9},
  1837.     {'N', 'a', 0x30ca},
  1838.     {'N', 'i', 0x30cb},
  1839.     {'N', 'u', 0x30cc},
  1840.     {'N', 'e', 0x30cd},
  1841.     {'N', 'o', 0x30ce},
  1842.     {'H', 'a', 0x30cf},
  1843.     {'B', 'a', 0x30d0},
  1844.     {'P', 'a', 0x30d1},
  1845.     {'H', 'i', 0x30d2},
  1846.     {'B', 'i', 0x30d3},
  1847.     {'P', 'i', 0x30d4},
  1848.     {'H', 'u', 0x30d5},
  1849.     {'B', 'u', 0x30d6},
  1850.     {'P', 'u', 0x30d7},
  1851.     {'H', 'e', 0x30d8},
  1852.     {'B', 'e', 0x30d9},
  1853.     {'P', 'e', 0x30da},
  1854.     {'H', 'o', 0x30db},
  1855.     {'B', 'o', 0x30dc},
  1856.     {'P', 'o', 0x30dd},
  1857.     {'M', 'a', 0x30de},
  1858.     {'M', 'i', 0x30df},
  1859.     {'M', 'u', 0x30e0},
  1860.     {'M', 'e', 0x30e1},
  1861.     {'M', 'o', 0x30e2},
  1862.     {'Y', 'A', 0x30e3},
  1863.     {'Y', 'a', 0x30e4},
  1864.     {'Y', 'U', 0x30e5},
  1865.     {'Y', 'u', 0x30e6},
  1866.     {'Y', 'O', 0x30e7},
  1867.     {'Y', 'o', 0x30e8},
  1868.     {'R', 'a', 0x30e9},
  1869.     {'R', 'i', 0x30ea},
  1870.     {'R', 'u', 0x30eb},
  1871.     {'R', 'e', 0x30ec},
  1872.     {'R', 'o', 0x30ed},
  1873.     {'W', 'A', 0x30ee},
  1874.     {'W', 'a', 0x30ef},
  1875.     {'W', 'i', 0x30f0},
  1876.     {'W', 'e', 0x30f1},
  1877.     {'W', 'o', 0x30f2},
  1878.     {'N', '6', 0x30f3},
  1879.     {'V', 'u', 0x30f4},
  1880.     {'K', 'A', 0x30f5},
  1881.     {'K', 'E', 0x30f6},
  1882.     {'V', 'a', 0x30f7},
  1883.     {'V', 'i', 0x30f8},
  1884.     {'V', 'e', 0x30f9},
  1885.     {'V', 'o', 0x30fa},
  1886.     {'.', '6', 0x30fb},
  1887.     {'-', '6', 0x30fc},
  1888.     {'*', '6', 0x30fd},
  1889.     {'+', '6', 0x30fe},
  1890.     {'b', '4', 0x3105},
  1891.     {'p', '4', 0x3106},
  1892.     {'m', '4', 0x3107},
  1893.     {'f', '4', 0x3108},
  1894.     {'d', '4', 0x3109},
  1895.     {'t', '4', 0x310a},
  1896.     {'n', '4', 0x310b},
  1897.     {'l', '4', 0x310c},
  1898.     {'g', '4', 0x310d},
  1899.     {'k', '4', 0x310e},
  1900.     {'h', '4', 0x310f},
  1901.     {'j', '4', 0x3110},
  1902.     {'q', '4', 0x3111},
  1903.     {'x', '4', 0x3112},
  1904.     {'z', 'h', 0x3113},
  1905.     {'c', 'h', 0x3114},
  1906.     {'s', 'h', 0x3115},
  1907.     {'r', '4', 0x3116},
  1908.     {'z', '4', 0x3117},
  1909.     {'c', '4', 0x3118},
  1910.     {'s', '4', 0x3119},
  1911.     {'a', '4', 0x311a},
  1912.     {'o', '4', 0x311b},
  1913.     {'e', '4', 0x311c},
  1914.     {'a', 'i', 0x311e},
  1915.     {'e', 'i', 0x311f},
  1916.     {'a', 'u', 0x3120},
  1917.     {'o', 'u', 0x3121},
  1918.     {'a', 'n', 0x3122},
  1919.     {'e', 'n', 0x3123},
  1920.     {'a', 'N', 0x3124},
  1921.     {'e', 'N', 0x3125},
  1922.     {'e', 'r', 0x3126},
  1923.     {'i', '4', 0x3127},
  1924.     {'u', '4', 0x3128},
  1925.     {'i', 'u', 0x3129},
  1926.     {'v', '4', 0x312a},
  1927.     {'n', 'G', 0x312b},
  1928.     {'g', 'n', 0x312c},
  1929.     {'1', 'c', 0x3220},
  1930.     {'2', 'c', 0x3221},
  1931.     {'3', 'c', 0x3222},
  1932.     {'4', 'c', 0x3223},
  1933.     {'5', 'c', 0x3224},
  1934.     {'6', 'c', 0x3225},
  1935.     {'7', 'c', 0x3226},
  1936.     {'8', 'c', 0x3227},
  1937.     {'9', 'c', 0x3228},
  1938.     {' ', ' ', 0xe000},
  1939.     {'/', 'c', 0xe001},
  1940.     {'U', 'A', 0xe002},
  1941.     {'U', 'B', 0xe003},
  1942.     {'"', '3', 0xe004},
  1943.     {'"', '1', 0xe005},
  1944.     {'"', '!', 0xe006},
  1945.     {'"', '\'', 0xe007},
  1946.     {'"', '>', 0xe008},
  1947.     {'"', '?', 0xe009},
  1948.     {'"', '-', 0xe00a},
  1949.     {'"', '(', 0xe00b},
  1950.     {'"', '.', 0xe00c},
  1951.     {'"', ':', 0xe00d},
  1952.     {'"', '0', 0xe00e},
  1953.     {'"', '"', 0xe00f},
  1954.     {'"', '<', 0xe010},
  1955.     {'"', ',', 0xe011},
  1956.     {'"', ';', 0xe012},
  1957.     {'"', '_', 0xe013},
  1958.     {'"', '=', 0xe014},
  1959.     {'"', '/', 0xe015},
  1960.     {'"', 'i', 0xe016},
  1961.     {'"', 'd', 0xe017},
  1962.     {'"', 'p', 0xe018},
  1963.     {';', ';', 0xe019},
  1964.     {',', ',', 0xe01a},
  1965.     {'b', '3', 0xe01b},
  1966.     {'C', 'i', 0xe01c},
  1967.     {'f', '(', 0xe01d},
  1968.     {'e', 'd', 0xe01e},
  1969.     {'a', 'm', 0xe01f},
  1970.     {'p', 'm', 0xe020},
  1971.     {'F', 'l', 0xe023},
  1972.     {'G', 'F', 0xe024},
  1973.     {'>', 'V', 0xe025},
  1974.     {'!', '*', 0xe026},
  1975.     {'?', '*', 0xe027},
  1976.     {'J', '<', 0xe028},
  1977.     {'f', 'f', 0xfb00},
  1978.     {'f', 'i', 0xfb01},
  1979.     {'f', 'l', 0xfb02},
  1980.     {'f', 't', 0xfb05},
  1981.     {'s', 't', 0xfb06},
  1982. #      endif /* FEAT_MBYTE */
  1983.     {NUL, NUL, NUL}
  1984.        };
  1985.  
  1986. #     endif /* OLD_DIGRAPHS */
  1987.  
  1988. #    endif /* Macintosh */
  1989. #   endif /* EBCDIC */
  1990. #  endif    /* !HPUX_DIGRAPHS */
  1991. # endif    /* !__MINT__ */
  1992. #endif    /* !MSDOS && !OS2 */
  1993.  
  1994. /*
  1995.  * handle digraphs after typing a character
  1996.  */
  1997.     int
  1998. do_digraph(c)
  1999.     int        c;
  2000. {
  2001.     static int    backspaced;    /* character before K_BS */
  2002.     static int    lastchar;    /* last typed character */
  2003.  
  2004.     if (c == -1)        /* init values */
  2005.     {
  2006.     backspaced = -1;
  2007.     }
  2008.     else if (p_dg)
  2009.     {
  2010.     if (backspaced >= 0)
  2011.         c = getdigraph(backspaced, c, FALSE);
  2012.     backspaced = -1;
  2013.     if ((c == K_BS || c == Ctrl_H) && lastchar >= 0)
  2014.         backspaced = lastchar;
  2015.     }
  2016.     lastchar = c;
  2017.     return c;
  2018. }
  2019.  
  2020. /*
  2021.  * Get a digraph.  Used after typing CTRL-K on the command line or in normal
  2022.  * mode.
  2023.  * Returns composed character, or NUL when ESC was used.
  2024.  */
  2025.     int
  2026. get_digraph(cmdline)
  2027.     int        cmdline;    /* TRUE when called from the cmdline */
  2028. {
  2029.     int        c, cc;
  2030.  
  2031.     ++no_mapping;
  2032.     ++allow_keys;
  2033.     c = safe_vgetc();
  2034.     --no_mapping;
  2035.     --allow_keys;
  2036.     if (c != ESC)        /* ESC cancels CTRL-K */
  2037.     {
  2038.     if (IS_SPECIAL(c))    /* insert special key code */
  2039.         return c;
  2040.     if (cmdline)
  2041.     {
  2042.         if (char2cells(c) == 1)
  2043.         putcmdline(c, TRUE);
  2044.     }
  2045. #ifdef FEAT_CMDL_INFO
  2046.     else
  2047.         add_to_showcmd(c);
  2048. #endif
  2049.     ++no_mapping;
  2050.     ++allow_keys;
  2051.     cc = safe_vgetc();
  2052.     --no_mapping;
  2053.     --allow_keys;
  2054.     if (cc != ESC)        /* ESC cancels CTRL-K */
  2055.         return getdigraph(c, cc, TRUE);
  2056.     }
  2057.     return NUL;
  2058. }
  2059.  
  2060. /*
  2061.  * Lookup the pair "char1", "char2" in the digraph tables.
  2062.  * If no match, return "char2".
  2063.  * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
  2064.  */
  2065.     static int
  2066. getexactdigraph(char1, char2, meta)
  2067.     int        char1;
  2068.     int        char2;
  2069.     int        meta;
  2070. {
  2071.     int        i;
  2072.     int        retval = 0;
  2073.     digr_T    *dp;
  2074.  
  2075.     if (IS_SPECIAL(char1) || IS_SPECIAL(char2))
  2076.     return char2;
  2077.  
  2078.     /*
  2079.      * Search user digraphs first.
  2080.      */
  2081.     dp = (digr_T *)user_digraphs.ga_data;
  2082.     for (i = 0; i < user_digraphs.ga_len; ++i)
  2083.     {
  2084.     if (dp->char1 == (unsigned)char1 && dp->char2 == (unsigned)char2)
  2085.     {
  2086.         retval = dp->result;
  2087.         break;
  2088.     }
  2089.     ++dp;
  2090.     }
  2091.  
  2092.     /*
  2093.      * Search default digraphs.
  2094.      */
  2095.     if (retval == 0)
  2096.     {
  2097.     dp = digraphdefault;
  2098.     for (i = 0; dp->char1 != 0; ++i)
  2099.     {
  2100.         if (dp->char1 == (unsigned)char1 && dp->char2 == (unsigned)char2)
  2101.         {
  2102.         retval = dp->result;
  2103.         break;
  2104.         }
  2105.         ++dp;
  2106.     }
  2107.     }
  2108. #ifdef FEAT_MBYTE
  2109.     /* Ignore multi-byte characters when not in multi-byte mode. */
  2110.     if (!has_mbyte && retval > 0xff)
  2111.     retval = 0;
  2112. #endif
  2113.  
  2114.     if (retval == 0)        /* digraph deleted or not found */
  2115.     {
  2116.     if (char1 == ' ' && meta)    /* <space> <char> --> meta-char */
  2117.         return (char2 | 0x80);
  2118.     return char2;
  2119.     }
  2120.     return retval;
  2121. }
  2122.  
  2123. /*
  2124.  * Get digraph.
  2125.  * Allow for both char1-char2 and char2-char1
  2126.  */
  2127.     int
  2128. getdigraph(char1, char2, meta)
  2129.     int    char1;
  2130.     int    char2;
  2131.     int    meta;
  2132. {
  2133.     int        retval;
  2134.  
  2135.     if (((retval = getexactdigraph(char1, char2, meta)) == char2)
  2136.         && (char1 != char2)
  2137.         && ((retval = getexactdigraph(char2, char1, meta)) == char1))
  2138.     return char2;
  2139.     return retval;
  2140. }
  2141.  
  2142. /*
  2143.  * Add the digraphs in the argument to the digraph table.
  2144.  * format: {c1}{c2} char {c1}{c2} char ...
  2145.  */
  2146.     void
  2147. putdigraph(str)
  2148.     char_u *str;
  2149. {
  2150.     int        char1, char2, n;
  2151.     int        i;
  2152.     digr_T    *dp;
  2153.  
  2154.     while (*str != NUL)
  2155.     {
  2156.     str = skipwhite(str);
  2157.     if (*str == NUL)
  2158.         return;
  2159.     char1 = *str++;
  2160.     char2 = *str++;
  2161.     if (char2 == 0)
  2162.     {
  2163.         EMSG(_(e_invarg));
  2164.         return;
  2165.     }
  2166.     if (char1 == ESC || char2 == ESC)
  2167.     {
  2168.         EMSG(_("E104: Escape not allowed in digraph"));
  2169.         return;
  2170.     }
  2171.     str = skipwhite(str);
  2172.     if (!isdigit(*str))
  2173.     {
  2174.         EMSG(_(e_number));
  2175.         return;
  2176.     }
  2177.     n = getdigits(&str);
  2178.  
  2179.     /* If the digraph already exists, replace the result. */
  2180.     dp = (digr_T *)user_digraphs.ga_data;
  2181.     for (i = 0; i < user_digraphs.ga_len; ++i)
  2182.     {
  2183.         if (dp->char1 == (unsigned)char1 && dp->char2 == (unsigned)char2)
  2184.         {
  2185.         dp->result = n;
  2186.         break;
  2187.         }
  2188.         ++dp;
  2189.     }
  2190.  
  2191.     /* Add a new digraph to the table. */
  2192.     if (i == user_digraphs.ga_len)
  2193.     {
  2194.         if (ga_grow(&user_digraphs, 1) == OK)
  2195.         {
  2196.         dp = (digr_T *)user_digraphs.ga_data + user_digraphs.ga_len;
  2197.         dp->char1 = char1;
  2198.         dp->char2 = char2;
  2199.         dp->result = n;
  2200.         ++user_digraphs.ga_len;
  2201.         --user_digraphs.ga_room;
  2202.         }
  2203.     }
  2204.     }
  2205. }
  2206.  
  2207.     void
  2208. listdigraphs()
  2209. {
  2210.     int        i;
  2211.     digr_T    *dp;
  2212.  
  2213.     msg_putchar('\n');
  2214.  
  2215.     dp = digraphdefault;
  2216.     for (i = 0; dp->char1 != NUL && !got_int; ++i)
  2217.     {
  2218.     if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result
  2219. #ifdef FEAT_MBYTE
  2220.         && (has_mbyte || dp->result <= 255)
  2221. #endif
  2222.         )
  2223.         printdigraph(dp);
  2224.     ++dp;
  2225.     ui_breakcheck();
  2226.     }
  2227.  
  2228.     dp = (digr_T *)user_digraphs.ga_data;
  2229.     for (i = 0; i < user_digraphs.ga_len && !got_int; ++i)
  2230.     {
  2231.     printdigraph(dp);
  2232.     ui_breakcheck();
  2233.     ++dp;
  2234.     }
  2235.     must_redraw = CLEAR;    /* clear screen, because some digraphs may be
  2236.                    wrong, in which case we messed up ScreenLines */
  2237. }
  2238.  
  2239.     static void
  2240. printdigraph(dp)
  2241.     digr_T    *dp;
  2242. {
  2243.     char_u    buf[30];
  2244.     char_u    *p;
  2245.  
  2246.     int        list_width;
  2247.  
  2248.     if ((dy_flags & DY_UHEX)
  2249. #ifdef FEAT_MBYTE
  2250.         || has_mbyte
  2251. #endif
  2252.         )
  2253.     list_width = 13;
  2254.     else
  2255.     list_width = 11;
  2256.  
  2257.     if (dp->result != 0)
  2258.     {
  2259.     if (msg_col > Columns - list_width)
  2260.         msg_putchar('\n');
  2261.     if (msg_col)
  2262.         while (msg_col % list_width != 0)
  2263.         msg_putchar(' ');
  2264.  
  2265.     p = buf;
  2266.     *p++ = dp->char1;
  2267.     *p++ = dp->char2;
  2268.     *p++ = ' ';
  2269. #ifdef FEAT_MBYTE
  2270.     if (has_mbyte)
  2271.     {
  2272.         /* add a space to draw a composing char on */
  2273.         if (enc_utf8 && utf_iscomposing(dp->result))
  2274.         *p++ = ' ';
  2275.         p += (*mb_char2bytes)(dp->result, p);
  2276.     }
  2277.     else
  2278. #endif
  2279.         *p++ = dp->result;
  2280.     if (char2cells(dp->result) == 1)
  2281.         *p++ = ' ';
  2282.     sprintf((char *)p, " %3d", dp->result);
  2283.     msg_outtrans(buf);
  2284.     }
  2285. }
  2286.  
  2287. #endif /* FEAT_DIGRAPHS */
  2288.  
  2289. #if defined(FEAT_KEYMAP) || defined(PROTO)
  2290.  
  2291. /* structure used for b_kmap_ga.ga_data */
  2292. typedef struct
  2293. {
  2294.     char_u    *from;
  2295.     char_u    *to;
  2296. } kmap_T;
  2297.  
  2298. #define KMAP_MAXLEN 20        /* maximum length of "from" or "to" */
  2299.  
  2300. static void keymap_unload __ARGS((void));
  2301.  
  2302. /*
  2303.  * Set up key mapping tables for the 'keymap' option
  2304.  */
  2305.     char_u *
  2306. keymap_init()
  2307. {
  2308.     curbuf->b_kmap_state &= ~KEYMAP_INIT;
  2309.  
  2310.     if (*curbuf->b_p_keymap == NUL)
  2311.     {
  2312.     /* Stop any active keymap and clear the table. */
  2313.     keymap_unload();
  2314.     }
  2315.     else
  2316.     {
  2317.     char_u    *buf;
  2318.  
  2319.     /* Source the keymap file.  It will contain a ":loadkeymap" command
  2320.      * which will call ex_loadkeymap() below. */
  2321.     buf = alloc((unsigned)(STRLEN(curbuf->b_p_keymap)
  2322. # ifdef FEAT_MBYTE
  2323.                                + STRLEN(p_enc)
  2324. # endif
  2325.                                + 14));
  2326.     if (buf == NULL)
  2327.         return e_outofmem;
  2328.  
  2329. # ifdef FEAT_MBYTE
  2330.     /* try finding "keymap/'keymap'_'encoding'.vim"  in 'runtimepath' */
  2331.     sprintf((char *)buf, "keymap/%s_%s.vim", curbuf->b_p_keymap, p_enc);
  2332.     if (cmd_runtime(buf, FALSE) == FAIL)
  2333. # endif
  2334.     {
  2335.         /* try finding "keymap/'keymap'.vim" in 'runtimepath'  */
  2336.         sprintf((char *)buf, "keymap/%s.vim", curbuf->b_p_keymap);
  2337.         if (cmd_runtime(buf, FALSE) == FAIL)
  2338.         {
  2339.         vim_free(buf);
  2340.         return (char_u *)N_("Keymap file not found");
  2341.         }
  2342.     }
  2343.     vim_free(buf);
  2344.     }
  2345.  
  2346.     return NULL;
  2347. }
  2348.  
  2349. /*
  2350.  * ":loadkeymap" command: load the following lines as the keymap.
  2351.  */
  2352.     void
  2353. ex_loadkeymap(eap)
  2354.     exarg_T    *eap;
  2355. {
  2356.     char_u    *line;
  2357.     char_u    *p;
  2358.     char_u    *s;
  2359.     kmap_T    *kp;
  2360. #define KMAP_LLEN   200        /* max length of "to" and "from" together */
  2361.     char_u    buf[KMAP_LLEN + 11];
  2362.     int        i;
  2363.     char_u    *save_cpo = p_cpo;
  2364.  
  2365.     if (eap->getline != getsourceline)
  2366.     {
  2367.     EMSG(_("E105: Using :loadkeymap not in a sourced file"));
  2368.     return;
  2369.     }
  2370.  
  2371.     /*
  2372.      * Stop any active keymap and clear the table.
  2373.      */
  2374.     keymap_unload();
  2375.  
  2376.     curbuf->b_kmap_state = 0;
  2377.     ga_init2(&curbuf->b_kmap_ga, (int)sizeof(kmap_T), 20);
  2378.  
  2379.     /* Set 'cpoptions' to "C" to avoid line continuation. */
  2380.     p_cpo = (char_u *)"C";
  2381.  
  2382.     /*
  2383.      * Get each line of the sourced file, break at the end.
  2384.      */
  2385.     for (;;)
  2386.     {
  2387.     line = getsourceline(0, eap->cookie, 0);
  2388.     if (line == NULL)
  2389.         break;
  2390.  
  2391.     p = skipwhite(line);
  2392.     if (*p != '"' && *p != NUL && ga_grow(&curbuf->b_kmap_ga, 1) == OK)
  2393.     {
  2394.         kp = (kmap_T *)curbuf->b_kmap_ga.ga_data + curbuf->b_kmap_ga.ga_len;
  2395.         s = skiptowhite(p);
  2396.         kp->from = vim_strnsave(p, (int)(s - p));
  2397.         p = skipwhite(s);
  2398.         s = skiptowhite(p);
  2399.         kp->to = vim_strnsave(p, (int)(s - p));
  2400.  
  2401.         if (kp->from == NULL || kp->to == NULL
  2402.             || STRLEN(kp->from) + STRLEN(kp->to) >= KMAP_LLEN)
  2403.         {
  2404.         vim_free(kp->from);
  2405.         vim_free(kp->to);
  2406.         }
  2407.         else
  2408.         {
  2409.         ++curbuf->b_kmap_ga.ga_len;
  2410.         --curbuf->b_kmap_ga.ga_room;
  2411.         }
  2412.     }
  2413.     vim_free(line);
  2414.     }
  2415.  
  2416.     /*
  2417.      * setup ":lnoremap" to map the keys
  2418.      */
  2419.     for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i)
  2420.     {
  2421.     sprintf((char *)buf, "<buffer> %s %s",
  2422.                 ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from,
  2423.                  ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].to);
  2424.     (void)do_map(2, buf, LANGMAP, FALSE);
  2425.     }
  2426.  
  2427.     p_cpo = save_cpo;
  2428.  
  2429.     curbuf->b_kmap_state |= KEYMAP_LOADED;
  2430. #ifdef FEAT_WINDOWS
  2431.     status_redraw_curbuf();
  2432. #endif
  2433. }
  2434.  
  2435. /*
  2436.  * Stop using 'keymap'.
  2437.  */
  2438.     static void
  2439. keymap_unload()
  2440. {
  2441.     char_u    buf[KMAP_MAXLEN + 10];
  2442.     int        i;
  2443.     char_u    *save_cpo = p_cpo;
  2444.  
  2445.     if (!(curbuf->b_kmap_state & KEYMAP_LOADED))
  2446.     return;
  2447.  
  2448.     /* Set 'cpoptions' to "C" to avoid line continuation. */
  2449.     p_cpo = (char_u *)"C";
  2450.  
  2451.     /* clear the ":lmap"s */
  2452.     for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i)
  2453.     {
  2454.     sprintf((char *)buf, "<buffer> %s",
  2455.         ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from);
  2456.     (void)do_map(1, buf, LANGMAP, FALSE);
  2457.     }
  2458.  
  2459.     p_cpo = save_cpo;
  2460.  
  2461.     ga_clear(&curbuf->b_kmap_ga);
  2462.     curbuf->b_kmap_state &= ~KEYMAP_LOADED;
  2463. #ifdef FEAT_WINDOWS
  2464.     status_redraw_curbuf();
  2465. #endif
  2466. }
  2467.  
  2468. #endif /* FEAT_KEYMAP */
  2469.  
  2470.